我目前有一个实例化另一个类的类,像这样

public abstract class ResponseAdapter
{
    PingResult result = new PingResult();

    public PingResult Result 
    {
       get { return result; } 
    }
}

尽管我希望结果是公开的,但我不希望其内容在受保护环境之外可以更改。

我知道我可以为Result创建一个构造函数并使内容只读,但是实例化PingResult的类分别设置其属性。 是否有任何关键字或技术可以让我在当前类的外部以只读方式维护PingResult的属性?

#1楼 票数:2

也许为PingResult创建包装器/代理类(例如PingResultWrapper ), ResponseAdapter随其属性公开。 PingResultWrapper进行的任何编辑都将通过该方式进行调解,因此您可以完全控制可以对包装的PingResult对象进行哪些更改。 另外,最好让PingResultWrappedPingResult实现相同的接口,以便调用者可以更抽象地对待它(即,无需了解实现细节)。

#2楼 票数:0 已采纳

C#中没有任何东西可以满足您所要求的功能。

您可以考虑两种选择。

  1. 使PingResult不可变并将其公开。 缺点是没有人可以修改它。
  2. 用一些不可变的抽象公开PingResult IPingResult接口,它不提供成员来改变状态。 您仍然可以保持PingResult可变,可以在问题的当前类中对其进行修改。

使用第二种方法,您可以选择将PingResult类标记为私有,这使其无法在类外部访问,并将实例公开为IPingResult 这样,您可以确保只有ResponseAdapter可以修改PingResult因为其他类甚至看不到设置器。 他们只能看到只读界面。

#3楼 票数:0

添加仅包含getters( IPingResult )的接口,并从中继承PingResult。

 public PingResult Result 
    {
       get { return result; } 
    }

将更改为返回接口而不是类:

public IPingResult Result 
        {
           get { return result; } 
        }

  ask by dotnetnoob translate from so

未解决问题?本站智能推荐:

2回复

在大多数方法中,将对象实例化为属性与对象实例化

使用C#Webforms和随附的代码示例,将程序的对象实例化为类的属性(选项1)的正确方法或缺点/优点是什么? 还是在每种方法中都将使用对象(选项2)? 考虑到还有更多的方法和对象,尽管大多数方法都将使用这些对象,但有一些方法则不会。 更新: 仅出于示例目的设置变量名。 问题
3回复

对象的数组实例化

在上面的代码中,当我实例化Teacher类时 这工作正常,但是当我在教师类中实例化对象“老师”的数组时 每当我尝试访问任何变量以在其中设置值时,都会出现错误“对象引用未设置为对象的实例”。 请帮忙。
4回复

NullReferenceException关于实例化的对象?

这是我继承的应用程序中的一段代码,用户死于黄屏: 你调用的对象是空的 在线上: 现在我有95%的把握是错误的参数是ref l_Monitor ,考虑到对象在几行之前被实例化,这非常奇怪。 有人知道为什么会发生吗? 请注意,我在代码的其他地方也看到了相同的问题。
2回复

DbContext不实例化导航属性

我创建了两个具有简单1对多关系的实体。 当我去测试它时,没有实例化ICollection导航属性。 我无法添加相关实体。 这是预期的功能吗? 我是否必须实例化导航属性? 我希望Entity Framework为我实例化集合。
2回复

在IF条件下实例化对象

我有一个类具有CheckValues(someVar)方法,该方法在接受首先检查为null或为空的参数后返回true或false。 在运行IIS的WCF服务以及多线程应用程序中,将调用此类的方法。 以下两种方法中哪一种更好? 1: 2: 第一种方法很传统。 第二个优点是仅当变量
6回复

这些对象的实例化方式有何不同?

以下两种情况有什么区别: 与 我在asp.net中有同样的问题: 与
1回复

用全名实例化对象

快速理论问题。 我有以下代码: 我有两个使用反射选择的伙伴关系实现。 Integration.Protocol不在使用中。 应动态选择实现; 事情是,如果我评论最后一行(protocolNotifier 的实例化),它只会选择一个实现(那个不是来自Integration.Protocol 的实现,
1回复

如何正确实例化HttpContext对象?

我正在尝试创建一个简单的代码来检索当前URL的字符串,如下所示: 但是,我在运行代码时遇到错误: Object reference not set to an instance of an object. 我假设我必须创建一个HttpContext的实例。 HttpContext的参数