Как реализовать частный сеттер при использовании интерфейса?
Я создал интерфейс с некоторыми свойствами.
Если интерфейс не существует, все свойства объекта класса будут установлены на
{ get; private set; }
Однако, это не разрешено при использовании интерфейса, поэтому можно ли это сделать, и если да, то как?
Ответы
Ответ 1
В интерфейсе вы можете определить только getter
для вашего свойства
interface IFoo
{
string Name { get; }
}
Однако в своем классе вы можете расширить его, чтобы иметь private setter
-
class Foo : IFoo
{
public string Name
{
get;
private set;
}
}
Ответ 2
Интерфейс определяет открытый API. Если public API содержит только getter, тогда вы определяете только getter в интерфейсе:
public interface IBar
{
int Foo { get; }
}
Частный сеттер не является частью публичного api (как и любой другой частный член), поэтому вы не можете определить его в интерфейсе. Но вы можете добавлять любых (частных) членов в реализацию интерфейса. На самом деле, не имеет значения, будет ли сеттер реализован как открытый или закрытый, или если будет сеттер:
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
Сеттер не является частью интерфейса, поэтому его нельзя вызывать через ваш интерфейс:
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