我知道这一定是个常见问题,但请看一下:
这里有一个测试类:
public class EmployeeClass
{
private int _id;
private string _name;
private double _salary;
public int id
{
get{...}
set{...}
}
public string name
{
get{...}
set{...}
}
//and so on
}
问题是:对我来说,让公共属性与所有私有字段匹配是没有意义的。
限制对类的itens访问的方法是什么?
在初始化时,我直接访问字段,如:
public EmployeeClass(int id, string name, double salary)
{
_id = id;
_name = name;
_salary = salary;
}
并且只读取所有(至少那些必须具有某种不变性的东西)吗?
这里最好的方法是什么?
感谢您的意见
答案 0 :(得分:2)
有许多态度,其中有两种有助于避免在课堂上吸气的人:
一般来说(这只是一个很小的品味),不建议在课堂上有很多公共制定者。
答案 1 :(得分:2)
要从语言惯例的角度回答问题,在C#3.0之前,通常通过声明具有提供读取和/或写入访问器的公共属性的私有字段来执行对内部数据的访问:
public class Employee
{
private int _id;
public int Id
{
get { return _id; }
set { _id = this; }
}
}
注意:在.Net中,属性按照惯例在PascalCase中。
虽然属性的目的是提供围绕访问对象内部状态的封装,但属性通常仅用作传递到私有字段访问作为占位符,如果在访问或计算状态时需要其他行为。由于这种模式会导致大量冗长和重复的编码,因此Microsoft在C#3.0中引入了自动实现的属性功能。自动属性允许开发人员声明由私有变量自动支持的属性:
public class Employee
{
public int Id { get; set; }
}
答案 2 :(得分:1)
Eric Lippert在different kinds of immutability in c#上有一个很棒的系列。他还提供了一些如何实现不同类型的不变性的例子。
他所谓的“一次写入不可变性”是指在类的构造函数中完成初始化并且所有字段都标记为private readonly
字段的类型。