c# - 同一属性的不同 getter 和 setter 接口(interface)

标签 c# properties interface

我已经为接口(interface)做了以下声明:

public interface IBasic
{
  int Data { get; }
}

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

编译器说 IChangeable.Data 隐藏了 IBasic.Data。这是合理的。我发现的替代方法是:

public interface IBasic
{
  int Data { get; }
}

public interface IChangeable : IBasic
{
  void ChangeData(int value);
}

有什么方法可以在接口(interface)的不同层次结构上为同一属性定义 setter 和 getter?或者这种方法有任何替代方法吗?

最佳答案

您可以重新声明它(或者更确切地说,告诉编译器您打算隐藏它):

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;}  }
}

但这很令人困惑,你需要使用显式实现等,如果你想使用隐藏版本,可能还需要对调用者进行一些强制转换。如果你走这条路,我建议在 IChangeable 上公开 getset:

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; } }
}

重新评论;公开实现类型:

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; }
}

关于c# - 同一属性的不同 getter 和 setter 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1624465/

相关文章:

javascript - 在我的 ASP.NET Web 解决方案中,OnClientClick 在返回 true 时不会传递给 OnClick 代码

c# - 带有计时器的 Xamarin Android UI 没有对更改使用react

objective-c - 如何声明由可变类型支持的不可变属性?

json - 从 JSON 反序列化时接口(interface)断言失败

c# - 截取窗口的 PNG 屏幕截图,但保持空气透明度

c# - C#中的Mono编译错误

c# - LINQ:为什么我不能在返回的对象中声明新对象?

django modelform 属性隐藏字段

java - 是否可以在java中实例化接口(interface)?

java - 多态性:为什么使用 "List list = new ArrayList"而不是 "ArrayList list = new ArrayList"?