Sco*_*ies 5 c# constructor initialization object
在构造函数之外的对象初始化是否打破封装?
鉴于:
class MyClass
{
public string _aString;
}
Run Code Online (Sandbox Code Playgroud)
_aString成员不应该是私有的,并且通过调用构造函数来实例化(此处省略了构造函数):
MyClass test = new MyClass("test");
Run Code Online (Sandbox Code Playgroud)
而不是对象初始化的替代方法:
MyClass test = new MyClass { _aString = "Test" };
Run Code Online (Sandbox Code Playgroud)
"在构造函数破解封装之外不进行对象初始化吗?"
好吧,不.正如您正确指出的那样,您只能初始化当前范围内已经可访问的属性.(公共,内部等)
这种初始化实际上只是构造一个类并为属性赋值的一些语法糖,它对于匿名类和Linq select子句非常有用.
暴露公共字段通常被认为是不好的做法......在某些情况下可能是可以接受的,例如,如果字段被标记为readonly(这意味着它必须在构造函数中设置).相反,您应该将此字段设为私有并通过属性公开它,该属性可能是也可能不是只读的,具体取决于其用途:
class MyClass
{
private string _aString;
public string AString
{
get { return _aString; }
// uncomment to make the property writable
//set { _aString = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6938 次 |
| 最近记录: |