我已经为接口(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
上公开 get
和 set
:
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/