【发布时间】:2011-03-31 18:50:31
【问题描述】:
我想这样做:
interface IBase
{
string Property1 { get; }
}
interface IInherited : IBase
{
string Property1 { get; set; }
}
这样IInherited 将具有inherited 属性Property1 以及允许set 的附加功能。
这可能吗?语法是什么?
编辑:请注意我将“继承”一词用粗体表示。我是在特别询问继承财产,而不是将其隐藏在新财产后面。
【问题讨论】:
-
我认为类的继承和接口的继承之间存在混淆。一个接口并没有真正继承另一个接口,而一个类继承了另一个接口。您的所有代码都在说 IInherited 也实现了 IBase。代码很好,它只是引发编译器警告,因为您正在更改界面中 Property1 的签名。你可以用 new 清除它。
-
正如许多其他人所指出的,这种语法是不可能的,但我觉得它应该是。如果您在 Property1 上使用反射,则会有一个 Property1_get 方法和一个 Property1_set 方法,因此从逻辑上讲,您似乎应该能够分别实现它们。并且无法做到这一点肯定会导致我有时重复代码(或忍受 new 关键字)。
-
@cedd 我也觉得应该是这样,原因与您提到的相同。属性只是伪装的方法。 C# 中的当前设计很奇怪,会造成不必要的混乱,这就是我提出这个 SO 问题的原因。
标签: c# inheritance interface properties