C# 将构造函数参数传递给私有(private)成员的目的是什么?

标签 c#

人们总是定义一个私有(private)成员,然后将构造函数参数值传递给它,就像设计 A。但我不明白这样做的好处,因为私有(private)成员没有得到副本(我的意思是深度克隆) ,那么为什么不选择设计 B 呢?

设计 A:

public class ClassA
{
    public int num {get;set;}
}

public class ClassB 
{

    private ClassA a ;

    public ClassB(ClassA _a) {
        a = _a;
    }
}

设计 B:

public class ClassA
{
    public int num {get;set;}
}

public class ClassB 
{
     public ClassA a {get; set;}
}

最佳答案

设计 A 和设计 B 都有用,但适用于不同的情况。

设计 A 的一个优点是,有一个用实例构造函数的参数初始化的私有(private)实例字段,您知道字段 a 的“身份”不会被任何人更改(类本身之外的任何人)只要 ClassB 对象存在。所以你可以基于此做出假设。这为设计 A 提供了一种设计 B 所缺乏的浅层不变性。

您还可以使用自动属性(而不是显式字段)制作设计 A;只需将自动属性 ​​privateset; 访问器。

关于C# 将构造函数参数传递给私有(private)成员的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29443646/

相关文章:

c# - 使用 Ninject 和 wpf 从所有程序集中加载模块

c# - 重复的验证者

c#线程化嵌套循环函数,每次执行有两个单独的作业

javascript - EntryPointNotFoundException 外部 JS 库错误

c# - SNMP mib 解析器

c# - 解码 Web 服务返回的 XML(< 和 > 替换为 < 和 &gt)?

c# - C# 是否包括有限状态机?

c# - 每种语言的 sitecore 中最受欢迎的项目。

c# - 断言非常基本

c# - 拳击内存问题