用C#设计类

时间:2009-10-18 04:00:11

标签: c# oop

我知道这一定是个常见问题,但请看一下:

这里有一个测试类:

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;
}

并且只读取所有(至少那些必须具有某种不变性的东西)吗?

这里最好的方法是什么?

感谢您的意见

3 个答案:

答案 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字段的类型。

相关问题