Fer*_*anB 7 c# properties interface
我为接口做了以下声明:
public interface IBasic
{
int Data { get; }
}
public interface IChangeable : IBasic
{
int Data { set; }
}
Run Code Online (Sandbox Code Playgroud)
编译器说IChangeable.Data隐藏了IBasic.Data.这很合理.我发现的替代方案是:
public interface IBasic
{
int Data { get; }
}
public interface IChangeable : IBasic
{
void ChangeData(int value);
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在接口的不同层次结构上为同一属性定义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;} }
}
Run Code Online (Sandbox Code Playgroud)
但这很令人困惑,您需要使用显式实现等,如果您想使用隐藏版本,可能还需要在调用者处进行一些转换。如果您选择这条路线,我建议同时公开get和seton 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; } }
}
Run Code Online (Sandbox Code Playgroud)
重新评论;公开实现类型:
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
如果你做到了(我更喜欢),这也会起作用:
public interface IChangeable : IBasic
{
new int Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |