установщик для свойства, не определенного в интерфейсе - PullRequest
2 голосов
/ 29 августа 2009

Если мой интерфейс имеет подпись только для геттера, например:

public interface IInterface 
{
   object Id{get;}
}

Таким образом, интерфейс определяет только открытый метод получения идентификатора для любого реализованного класса. теперь, когда у меня есть класс:

public class Simple : IInterface
{
  object Id
  {
    get{return something;} 
    set{ do something else;}
  }
}

компилятор жалуется на установщик, так как установщик не определен в интерфейсе. Однако я ничего не диктовал в контракте интерфейса для сеттера; почему интерфейс настаивает на установщике производных классов?

Ответы [ 2 ]

11 голосов
/ 29 августа 2009

Вам просто нужно сделать Id публичным. Например, это хорошо компилируется:

public interface IInterface
{
    object Id { get; }
}
public class Simple : IInterface
{
    private int something;
    public object Id
    {
        get { return something; }
        set{ something = (int)value;}
    }
}
1 голос
/ 28 июля 2011

При проектировании .net Microsoft решила создать три не взаимозаменяемых типа свойств: только чтение, только запись и чтение и запись. В C #, если объявить свойство чтения-записи с тем же именем, что и одно или несколько свойств интерфейса, которые предполагается реализовать, компилятор может автоматически создать не только свойство чтения-записи, которое фактически указал программист, но и только для чтения и / или свойства только для записи, необходимые для удовлетворения интерфейсов. Например, если интерфейс IReadableFoo реализует свойство Foo только для чтения, IWritableFoo реализует свойство Foo только для записи, а IReadWriteFoo наследует IReadableFoo и IWritablefoo, а также реализует «новое» свойство чтения и записи Foo, а класс ReadWriteFoo реализует IReadWriteFoo и объявляет открытое свойство чтения-записи Foo, компилятор будет иметь ReadWriteFoo, генерирующий реализации интерфейса свойства только для чтения IReadableFoo.Foo, свойства только для записи IWritableFoo.Foo и свойства чтения-записи IReadWriteFoo.Foo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...