以下不是好习惯吗?
public interface IMyImmutableData
{
int Data { get;}
}
public interface IMyMutableData
{
int Data { set;get;}//implements both get and set
}
public class MyData : IMyImmutableData, IMyMutableData
{
public int Data{get;set;} //implements both IMyImmutableData, IMyMutableData
}
void Main()
{
MyData myData = new MyData{Data=10};
Console.WriteLine(myData.Data);
}
Run Code Online (Sandbox Code Playgroud)
我问的原因是重新共享给我以下警告:“通过此界面访问时可能存在歧义”
我要执行上述操作的原因是,当我创建使用MyData类的方法时,我希望将其作为IMyMutable或IMyImmutable对象发送,以便该方法的用户知道他们可以期望该方法更新或不更新。更新传入的对象。
我认为您可以忽略Resharper的警告,因为模棱两可是故意的。
但是,通常使用包装器类来提供对某些内容的只读访问,这样就不能将其强制转换为提供更多功能的任何内容。
public class MyReadonlyData : IMyReadonlyData {
private MyData instance;
public int Data {
get {
return instance.Data;
}
}
public MyReadonlyData( MyData mydata ) {
instance = mydata;
}
}
// no access to original object or setters, period.
Run Code Online (Sandbox Code Playgroud)
我认为在这种情况下你的结构很好。您不想通过单独的属性显式实现接口,因为这样您Data通过不可变接口访问的实际上将与可变接口访问的不同。
此外,您的实际代码可能更复杂,因为在这种情况下没有歧义:您是Data通过对象本身进行访问,因此不需要考虑接口。
具有显式接口实现的一种解决方案是使用公共支持字段,而不是自动属性:
private int _data;
public int IMyImmutableData.Data
{
get
{
return this._data;
}
}
public int IMyMutableData.Data
{
get
{
return this._data;
}
set
{
this._data = value;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1302 次 |
| 最近记录: |