2015-10-28 194 views
-4

如果使用構造函數初始化類對象,則只能通過成員方法直接訪問成員變量(objectname.variablename)。構造函數初始化vs獲取集合初始化

而且

如果一個類對象是使用GET初始化;設置;那麼成員變量只能通過get; set;屬性。

這些說法是否正確?或者我在這裏錯過了什麼?

以下是代碼和代碼的輸出。

using System; 
public class emp { 

    private int empId = -1; 
    private string empName = string.Empty; 

    public int PEmpId { 
     set; 
     get; 
    } 
    public string PEmpName { 
     set; 
     get; 
    } 

    public emp(int i, string str) { 
     empId = i; 
     empName = str; 
    } 

    public void empDis(emp e) { 
     Console.WriteLine("Id =>{0}<=, Nm =>{1}<=", e.empId, e.empName); 
     Console.WriteLine("Id =>{0}<=, Nm =>{1}<=", e.PEmpId, e.PEmpName); 
    } 

    public emp() {} 
} 

public class empUsage { 

    public void Main() { 
     emp e = new emp(1, "R"); 
     e.empDis(e); 
     emp e1 = new emp(); 
     e1.PEmpId = 1; 
     e1.PEmpName = "W"; 

     e1.empDis(e1); 
    } 

} 

輸出:

 
Id =>1<=, Nm =>R<= 
Id =>0<=, Nm =><= 

Id =>-1<=, Nm =><= 
Id =>1<=, Nm =>W<= 
+2

這必須是作業或某種測試問題。 –

+0

不,不是。我正在通過編碼示例自己學習c sharp。 – user3594120

+2

開始閱讀一些教程,以及有關在線教程的在線免費示例http://www.csharp-station.com/Tutorial/CSharp/SmartConsoleSetup.aspx – MethodMan

回答

1

沒錯,但你的了get/set的實現是關閉:

public int PEmpId { 
    set { empId = value; } 
    get { return empId; } 
} 
public string PEmpName { 
    set { empName = value; } 
    get { return empName; } 
} 

,除非你想 「自動(或隱含的)屬性」,那麼你不需要empIdempName字段。

+0

*「確實,」*確切地說,這是真的? –

+0

@JonathonReinhart,從我的閱讀中可以瞭解'領域'和'屬性'之間的區別 – GreatAndPowerfulOz

+0

@ Gread.And.Powerful.Oz你是對的。 get set聲明關閉。當我修復它們時,我能夠通過成員和通過屬性訪問值。 謝謝你不要打電話給我的問題和陳述「不理智」,不像別人回答。 – user3594120

4

那些陳述是無稽之談。成員如何初始化以及如何訪問它們之間沒有關係。

emp類具有成員變量和屬性。如果初始化成員變量,則可以從成員變量中獲取值。如果您初始化屬性,則可以從屬性中獲取值。

帶參數的構造函數使用這些值來初始化成員變量。這意味着你在成員變量中有值,所以你可以使用這些值。但是,它不會阻止您初始化屬性並使用它們(如果您喜歡)。

0

如果使用構造則構件 變量只能經由構件方法僅直接(objectname.variablename) 訪問初始化類對象。

如果一個類對象使用get; set;方法初始化;那麼成員 變量只能通過get; set來訪問;屬性。

這兩個陳述都是不真實的。成員初始化的方式並不直接與您如何訪問它們。當談到直接引用成員時,後者由訪問修飾符private,public等)指定。如果你公開你的領域,那麼無論他們是如何實例化的,他們都可以被任何使用你的類的代碼直接訪問。另一方面,如果你將它們設置爲私有的,那麼只有類內部的代碼才能訪問它們,這取決於如何實現。你可以公開一個getter和/或setter,創建一個方法來改變它們的值,或者兩者都是(或者都不是)。無論初始化方式如何,所有這些選項都是可能的。

0

這些說法是否正確?

我失去了一些東西在這裏?

是。在我看來,你不明白

  • 訪問修飾符。例如public,private
  • 屬性相對於字段
  • 信息隱藏的一般思想,又名封裝。