Я створив інтерфейс з деякими властивостями.
Якщо інтерфейс не існував, були б встановлені всі властивості об'єкта класу
{ get; private set; }
Однак це не дозволено при використанні інтерфейсу, тому це можна досягти, і якщо так, як?
Я створив інтерфейс з деякими властивостями.
Якщо інтерфейс не існував, були б встановлені всі властивості об'єкта класу
{ get; private set; }
Однак це не дозволено при використанні інтерфейсу, тому це можна досягти, і якщо так, як?
Відповіді:
В інтерфейсі ви можете визначити лише 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; }
}
Приватний сетер не є частиною публічного 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
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