2013-03-20 100 views
0

訪問修飾符的用途是隱藏數據成員以防未經授權的訪問。而屬性的目的是揭示Access修飾符。訪問修飾符的用途死亡。以下是例子。訪問修飾符VS屬性

public class Employee 
{ 
    private int EmployeeID; 
    private string Name; 
    private int Salary; 

    public int EID { get { return this.EmployeeID; } set { this.EmployeeID = value; } } 
    public string EName { get { return this.Name; } set { this.Name = value; } } 
    public int ESalary { get { return this.Salary; } set { this.Salary = value; } } 
} 

static void Main(string[] args) 
{ 
    Employee Employee = new Employee(); 
    Employee.EName = "Zaheer"; 
} 

在這裏我可以訪問屬性名稱,它間接訪問名稱。如果問題很愚蠢,任何評論都會很抱歉。

回答

2

私人領域的想法並不是說沒有辦法,無論如何,該值是由類型以外的東西修改。如果那是真的,他們將完全無用。私人領域的想法是,直接成員本身的訪問被禁止在該類型之外,但是通過一些非私有成員可以允許有限程度的間接訪問。這些公共成員將提供一些比公共訪問更有限的訪問方式。

在你的特定例子中確實沒有太多的限制發生;任何有實例的人都可以隨時訪問該值,或者任何具有實例的人隨時設置該值。它比公開公開公開地保護起來還要多一點,例如你不能通過方法中的ref參數直接創建對該字段的引用,但是你說對增加的保護很少是正確的。當外部實體修改該領域的能力受到某種限制時,它變得更有用。也許它可以獲得價值而不是設置它,也許某些值根本無法設置,也許它會以調用方法時從未由任何外部實體直接指定的方式改變它自己。

在一天結束時的想法是,方法/屬性的定義將決定對基礎字段的訪問級別。這種訪問級別可以從幾乎完全到幾乎沒有。

2

你有點不對。屬性是數據成員,訪問修飾符是修改對數據成員訪問權限的修飾符。屬性可以從外部訪問,因爲它們具有「公共」訪問修飾符。

+0

是的,你是對的,但事情是,我仍然可以訪問私人會員。我認爲它不應該被允許.... – 2013-03-20 14:30:41

+0

也看你的語法,你會想要標準化你的領域的命名是這樣的:公共領域(也稱爲屬性)將有他們的名字以大寫字母開頭,而私人領域將以小寫字母開頭。 – 2013-03-20 14:34:07

+0

您不能訪問其他所屬類別的私人成員。您在代碼中訪問的內容是公開的EName屬性。 – 2013-03-20 14:35:46

1

屬性實際上是返回和設置字段值的方法的語法糖。因此,他們有幾個優點:

  1. 屬性可以執行額外的檢查。比如,您可以嘗試將EID設置爲負值或將EName設置爲空字符串。
  2. 屬性可以一次設置多個字段以保持對象的內部數據一致。
  3. 屬性可以在接口中使用,而字段不能。
  4. 屬性可以爲getter和setter擁有單獨的訪問修飾符。

但是,設置一個場更爲有效,因爲它沒有調用方法的開銷。

1

您的示例屬性都非常簡單,可以由自動屬性替換。屬性用於控制對字段的訪問,而不僅僅是公開字段。

舉個例子,如果你有一個名爲EmailAddress屬性,你可能要檢查的值一個適當的電子郵件地址被分配之前。您可以在屬性的設置器中處理它,並拒絕任何無效值。當你直接暴露一個字段時,你不能在類中控制它。

這是屬性顯而易見的用途之一,但是在使用字段方面還有其他用途和優點。