人们总是定义一个私有(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;只需将自动属性 private
的 set;
访问器。
关于C# 将构造函数参数传递给私有(private)成员的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29443646/