2009-10-18 46 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