Интерфейсы с другим методом считывания и методом set для того же propertie

Пойдите сюда:

Tools > Options > Text Editor > C# > Formatting > Indentation > Indent case labels

7
задан FerranB 26 October 2009 в 12:22
поделиться

3 ответа

Вы можете повторно объявить его (или, скорее, сообщить компилятору, что вы намереваетесь скрыть его):

public interface IChangeable : IBasic
{
  new int Data { set; }
}
class Foo : IChangeable
{
    private int value;
    int IBasic.Data { get { return value; } }
    int IChangeable.Data { set {this.value = value;}  }
}

Но это сбивает с толку, и вам понадобится использовать явные реализации и т. д., и, возможно, немного приведения к вызывающему, если вы хотите использовать скрытую версию. Если вы пошли по этому пути, я бы порекомендовал раскрыть как get , так и set на IChangeable :

public interface IChangeable : IBasic
{
    new int Data { get;  set; }
}
class Foo : IChangeable
{
    private int value;
    int IBasic.Data { get { return value; } }
    int IChangeable.Data { set { this.value = value; } get {return value; } }
}

Re в комментариях; для раскрытия в реализующем типе:

public interface IChangeable : IBasic
{
    new int Data { set; }
}
public interface IBasic
{
    int Data { get; }
}
class Foo : IChangeable
{
    private int data;
    public int Data {
        get { return data; }
        set { data = value; }
    }
}

Это также будет работать, если вы сделаете это (что я предпочитаю):

public interface IChangeable : IBasic
{
    new int Data { get; set; }
}
4
ответ дан 7 December 2019 в 10:04
поделиться

Возможно, я неправильно понял ваш вопрос, но не могли бы вы просто сделать

public interface IChangeable : IBasic
{
  int Data { get; set; }
}

т.е. позволить IChangeable переопределить свойство, но сохранить "get".

Поскольку IChangeable наследуется от IBasic, я предполагаю, что вам нужна реализация из IChangeable иметь реализацию get.

1
ответ дан 7 December 2019 в 10:04
поделиться

Я думаю, что методы GetData и SetData более понятны для этой ситуации:

public interface IBasic
{  
    int GetData();
}

public interface IChangeable : IBasic
{  
    void SetData(int data)
}
1
ответ дан 7 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: