当前位置: 首页 > 编程语言 > C#

C#接口中不允许的字段共享

时间:2023-04-10 17:32:22 C#

C#接口中不允许的字段Java和C#语言之间存在许多差异,我观察到的其中之一是我们不能在接口中添加变量常量。来自Java背景,当我尝试这个时,我感到困惑并看到编译错误。有没有人解释为什么会这样?字段是类的实现细节,不应公开其接口。接口是一种抽象出类的实现细节的方法。这两个概念看似矛盾,并不能真正融合在一起。您可以在接口中声明属性。更新(在意识到问题是关于常量而不是变量字段之后):我认为(纯粹是我个人的猜测)Java决定允许这样的构造,因为它当时没有枚举类型。C#从一开始就有枚举,并且大多数时候更喜欢常量。此外,您可以在C#中创建一个静态类,并向其中添加您喜欢的所有内容,然后毫无困难地沿着界面发送它。支持这样的构造只会使接口定义复杂化。我很少想在接口中有一个实际的常量——它们通常在类中更有意义。使用Java接口只包含常量(以减少使用它们的类中的类型)的做法很烦人;我只将常量放在接口中,它们与接口本身的功能有关。但是,有时我认为能够在接口中定义枚举会很好,如果这是预期使用枚举的唯一上下文。有趣的是,即使C#不允许,VB也允许这样做。实际上,这两种方法都可以将接口本身变成一个“迷你名称空间”。但是,我不能说我在编写C#时经常怀念它。正如C#团队喜欢说的那样,函数不会被删除-它们会被添加,而添加函数的成本很高。这意味着该功能确实需要减轻其重量——在添加该功能之前必须有显着的好处。我个人不会把这个问题列在清单上。相关想法:能够在接口中定义嵌套类可能会很好,通常是接口的实现——要么表达它的契约,要么作为“默认”实现以防存在这种情况。并且在Java中也不鼓励向接口添加常量(至少根据EffectiveJava)向接口添加常量是错误的,而且几乎不可能做到。过去,很多人用很多常量声明接口,然后让另一个类实现这个接口,这样他们就可以使用这些常量而无需限定所说的常量。这当然是另一种反模式,只是因为人们很懒惰。如果你真的想在接口中使用常量,那么定义一个返回该常量的方法。以上就是C#学习教程:C#接口不允许的字段分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: