为什么C#编译器不允许接口中的私有属性设置器?

Uco*_*dia 21 c# compiler-construction setter properties interface

在某些情况下,比如MVVM视图模型,我有时需要私有setter,因为视图模型公开了一个只能在内部修改的状态.

那么在接口上需要私有的setter是错误的吗?(我的意思不是特别在所描述的场景中)如果没有,为什么C#编译器不允许它?

谢谢.

Fis*_*rdo 56

根据定义,接口是其他代码使用的合同,而不是私有成员的合同.但是,您可以在接口中指定只读属性,并在具体类中实现私有setter:

public interface IFoo
{
    string MyReadonlyString { get; }
} 

public class FooImplementation : IFoo
{
    public string MyReadonlyString { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 这使我意识到,我对接口的理解已经随着时间而变形。我实际上忘记了他们最初的目标是什么。我将它们用作合同,但期望从中获得更多。谢谢。 (2认同)
  • 除了实现零个或多个接口之外,具体类还可以从基类继承。经常使用基类具有消除一些样板的很好的副作用。如果您认为这是值得的,您可以构建一个小的基类层次结构来覆盖大多数您希望使用多重继承的用例。除此之外,我会尝试使用组合而不是继承来减少样板/增加代码重用。 (2认同)