我目前有一个实例化另一个类的类,比如这个
public abstract class ResponseAdapter
{
PingResult result = new PingResult();
public PingResult Result
{
get { return result; }
}
}
虽然我希望结果公开,但我不希望其内容在受保护环境之外更改。
我知道我可以为Result创建一个构造函数并使事情只读,但实例化PingResult的类会单独设置其属性。是否有任何关键字或技术可以让我在当前课程之外只读取PingResult的属性?
答案 0 :(得分:2)
也许为PingResult
创建一个包装器/代理类(例如PingResultWrapper
)ResponseAdapter
与其属性一起公开。对PingResultWrapper
所做的任何修改都将通过该修改进行调整,因此您可以完全控制对包装的PingResult
对象进行哪些更改。此外,最好让PingResult
和WrappedPingResult
实现相同的接口,以便调用者可以更抽象地对待它(即不需要知道实现细节)。
答案 1 :(得分:0)
C#中没有任何内容可以提供您所询问的功能。
您可以考虑两种选择。
PingResult
不可变并公开它。缺点是没有人可以修改它。PingResult
。 I.e IPingResult
接口,它不提供成员来改变状态。你仍然可以保留PingResult
mutable,可用于在问题的当前类中修改它。使用第二种方法,您可以选择将PingResult
类标记为private,使其在类外无法访问,并将实例公开为IPingResult
。这样,您可以确保只有ResponseAdapter
可以修改PingResult
,因为其他类甚至看不到setter;他们只能看到只读界面。
答案 2 :(得分:0)
添加一个只包含getter(IPingResult
)的接口,并从中继承PingResult。
public PingResult Result
{
get { return result; }
}
将被更改为返回接口而不是类:
public IPingResult Result
{
get { return result; }
}