在C#中声明父接口中的属性getter和子接口中的setter

时间:2018-08-13 10:57:47

标签: c#

我想在父接口中声明属性的 getter ,在子接口中声明 setter

    public interface IReadOnlyValue
    {
        int Value { get; }
    }
    public interface IValue : IReadOnlyValue
    {
        int Value { set; }
    }
    public class Value : IValue 
    {
        int Value { get; set; }
    }

无法编译,因为Value中的IValue hides来自IReadOnlyValue。知道我需要Value才能成为财产吗?

1 个答案:

答案 0 :(得分:2)

看来这是类名 Value错了:

  

错误CS0542“值”:成员名称不能与他们的相同   附件类型

(粗体是我的)。如果将Value重命名为MyValue,就可以了:

  public interface IReadOnlyValue {
    int Value { get; }
  }

  // It seems that IValue should have both "get" and "set"
  // See IList<T> and IReadOnlyList<T> as an example
  // However, you can drop "get" if you want
  public interface IValue {
    int Value { get; set; }
  }

  public class MyValue: IReadOnlyValue, IValue {
    public int Value { get; set; }
  }