如何在使用接口时实现私有 setter?

我用一些属性创建了一个接口。

如果接口不存在,类对象的所有属性将被设置为

{ get; private set; }

但是,在使用接口时这是不允许的,所以这是否可以实现,如果可以,如何实现?

46522 次浏览

在接口中,只能为属性定义 getter

interface IFoo
{
string Name { get; }
}

但是,在你的类,你可以扩展它,有一个 private setter-

class Foo : IFoo
{
public string Name
{
get;
private set;
}
}

接口定义了公共 API。如果公共 API 只包含 getter,那么你只需要在接口中定义 getter:

public interface IBar
{
int Foo { get; }
}

Private setter 不是公共 API 的一部分(与任何其他私有成员一样) ,因此不能在接口中定义它。但是您可以自由地向接口实现添加任何(私有)成员。实际上,setter 是以公共还是私有形式实现,或者是否有 setter 并不重要:

 public int Foo { get; set; } // public


public int Foo { get; private set; } // private


public int Foo
{
get { return _foo; } // no setter
}


public void Poop(); // this member also not part of interface

Setter 不是接口的一部分,所以它不能通过你的接口调用:

 IBar bar = new Bar();
bar.Foo = 42; // will not work thus setter is not defined in interface
bar.Poop(); // will not work thus Poop is not defined in interface