2012-05-18 26 views
0

我不太瞭解屬性。代碼行:method2(x.str1,x.str2,x.str3,x.str4); ---拋出一個「對象引用未設置爲對象錯誤的實例」。任何想法讚賞。 x.str1不解決?使用c#中的屬性初始化一個類 -

使用

otherC#

class Test{ 

    private myProperty x; 

    private string str1, str2, str3, str4; 

    private myProperty A 
      { 

       get { return x; }   

       set 
       { 

        str1 = value.str1; 
        str2 = value.str2; 
        str3 = value.str3; 
        str4 = value.str4; 

       }    
      } 

    public void myMethod() 
     { 

       Test tst = new Test(); 
       myProperty x = new myProperty(); 
       //Assigning property varaibles: 
        x.str1 = "this"; 
        x.str2 = "is"; 
        x.str3 = "my"; 
        x.str4 = "test"; 

       try 
       { 

        tst.method2(x.str1, x.str2, x.str3, x.str4); 
       } 
       catch(Exception) 
       { 
        throw; 
       } 
      } 

    public void method2(string str1, string str2,string str3, string str4) 
    { 
    } 

    } 

    OtherC#.cs contains the definition for myProerty class 

    namespace temp 
    { 
    public class xyx {some code;} 
    public interface abc {some code}; 
    public class myProperty { 

      public string str1 { get; set; } 

      public string str2 { get; set; } 

      public string str3 { get; set; } 

      public string str4 { get; set; } 
    } 
    } 

回答

5

myProperty x是不是(我加入一些代碼,添加更多的功能,以現有的一組了,我會初始化使用方法和屬性的類myProperty的。)當你打電話時設置爲一個對象的實例

x.str1 = "this"; 

你必須首先初始化它(例如在你的構造函數代碼中)。

+1

+1,OP聽起來好像你來自C++,當你聲明它們的時候會自動創建對象。在使用它之前,你需要創建一個新的實例,比如'x = new myProperty()'。 – Tejs

+1

@Tejes您還必須在C++中顯式創建對象。我多年來一直沒有使用C++,但很難想象這會改變......除非我通過某種蠕蟲洞進入另一個宇宙。 –

3

變量只是對象的引用。它本身並不是一個對象。所以這個變量是null,直到你將它設置爲引用一個對象。在這種情況下,你可能只是希望它等於一個新的對象,所以你需要實例化一個對象。例如,改變這一行:

private myProperty x; 

這樣:

private myProperty x = new myProperty(); 

我應該澄清,這是唯一的真正的引用類型(類),而不是值類型(結構)。