【发布时间】:2011-10-19 00:05:51
【问题描述】:
在我的程序的某些位置,我需要访问对象的具体实现(Test),而在其他位置,我只需要一个只读接口(ITest)。这是为了防止用户假设所有属性都已设置并可修改
例如,如果用户调用 TestFactory.Search,则返回的集合将阻止他们修改属性 A 和使用 CollectionB(未在函数内部设置)。我希望能够使用对象初始值设定项并保持属性名称相同。我有以下解决方案:
public interface IReadOnly
{
int Id{ get; }
string Name{ get; }
}
public class ClassA : IReadOnly
{
int Id{ get; internal set; }
string Name{ get; set; }
}
public interface ITest
{
int Id{ get; }
IReadOnly A { get; }
}
public class Test : ITest
{
private ClassA classA = new ClassA();
int Id{ get; internal set; }
IReadOnly ITest.A{ get{ return classA; } }
public ClassA A
{
get
{
return classA;
}
set
{
classA = value;
}
}
public IEnumerable<string> CollectionB {get;set;}
}
public static class TestFactory
{
IEnumerable<ITest> Search(){ /**/ }
Test Read(){ /**/ };
}
是否有更好的方法来解决这个问题?是否滥用显式接口实现的概念?
【问题讨论】:
-
让
Test类也实现IReadOnly然后只使用test as IReadOnlyotest
标签: c# interface implementation