2009-10-18 43 views
1

我知道这一定是一个常见的问题,但看一看:设计类在C#中

在这里,我有一个测试类:

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 
} 

的问题是:对我来说,它没有任何意义具有与所有私人字段匹配的公共属性。

限制对班级访问权限的方法是什么?

在初始化的时间做我直接访问的字段,如:

public EmployeeClass(int id, string name, double salary) 
{ 
_id = id; 
_name = name; 
_salary = salary; 
} 

,使所有只读(至少必须有某种永恒性的)?

这里最好的办法是什么?

谢谢您的意见

+0

你打算如何使用这个类?它的目的是什么?这是回答“我应该如何设计这个对象”问题的背景。 – 2009-10-18 04:13:34

回答

2

有很多的态度,他们两个人,帮助在类避免干将是:

一般(而这仅是一个很小的味道),不建议在课堂上有许多公开制定者。

+2

我有点同意,但这是一个警告,因为这是一个非常深刻的宗教讨论。 – BobbyShaftoe 2009-10-18 04:15:18

+0

我当然不想开始一场神圣的战争。但这让我发疯。我知道有很多方法,但我不想以某种方式(或另一种方式),后来发现我需要重构(很多)代码才能使其工作。哎呀! – 2009-10-18 04:25:35

+1

我认为以前的评论都是正确的,方法取决于上下文。面向东方的工作对我来说,将其与单元测试结合起来可以帮助我生成更多可维护的代码,当然也包括具有逻辑的类。对于简单的数据对象没有理由是狂热 - 公共获取和设置属性效果最好:) – Elisha 2009-10-18 04:51:51

1

埃里克利珀对different kinds of immutability in c#一个伟大的系列赛。他还为如何实现不同类型的不变性提供了一些例子。

他所谓的“一次写入不可变性”是在类的构造函数中进行初始化的类型,所有字段都标记为private readonly字段。

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

Upvote,因为我喜欢使用C#的新3.0属性。一位我的大学教授声称使用这些类型的属性是不正确的,意大利面代码。去搞清楚。 – 2009-10-19 01:41:53