2015-04-06 209 views
0

我最近一直在尋找到構造函數,即時通訊目前試圖通過一個對象到另一個類文件的方式即時通訊做是這樣的:將對象傳遞給另一個類?

class Program 
{ 
    static void Main(string[] args) 
    { 
     Class1 objPls = new Class1(); 

     objPls.nameArray[0] = "jake"; 
     objPls.nameArray[1] = "tom"; 
     objPls.nameArray[2] = "mark"; 
     objPls.nameArray[3] = "ryan"; 

     Echodata form2 = new Echodata(objPls); 
    } 
} 

class Class1 
{ 
    public string[] nameArray = new string[3]; 
} 

class Echodata 
{ 
    public Class1 newobject = new Class1(); 

    public Echodata(Class1 temp) 
    { 
     this.newobject = temp; 
    } 

    // so now why cant i access newobject.namearray[0] for example? 
} 

問題是我不能訪問該對象進入array ..

傳遞對象的方法有哪些?我被告知這大致是一種做法,並且試驗了一段時間無濟於事。

+1

如果一個類不包含實例構造函數聲明,將自動提供一個默認的實例構造函數。該默認構造函數只是調用直接基類的無參數構造函數。如果直接基類沒有可訪問的無參數實例構造函數,則會發生編譯時錯誤。如果類是抽象的,那麼默認構造函數的聲明可訪問性是受保護的。否則,默認構造函數的聲明可訪問性是公共的。 – 2015-04-06 03:17:07

+3

如果您提供**精確的編譯器錯誤**以及最小的repro情況,它總是有幫助的。如果沒有編譯器錯誤,請解釋您的示例輸入是什麼,您的預期輸出是什麼,以及** actual **輸出是什麼。 – 2015-04-06 03:26:54

+1

你上面的代碼甚至不會編譯,它會在這一行中斷開:'objPls.nameArray [3] =「ryan」;'因爲'nameArray'的大小是3,但你試圖設置第四個元素。 – ekad 2015-04-06 03:29:14

回答

1

不知道你不能做什麼。例如,您的代碼與此修改工作,或至少編譯。

class echodata 
    { 
     public Class1 newobject = new Class1(); 

     public echodata(Class1 temp) 
     { 
      this.newobject = temp; 
     } 

     // so now why cant i access newobject.namearray[0] for example? 
     // What kind of access do you want? 

     public void method1() 
     { 
      newobject.nameArray[0] = "Jerry"; 
     } 

    } 
0

當試圖在數組的第四個索引上設置「ryan」字符串時,您的代碼將引發錯誤。您最初設置陣列的長度爲3.

在您的EchoData類中,您可以訪問nameArray對象而不存在問題,但是您必須在方法或構造函數中訪問它。你不能在這些之外操縱它的內容。

請記住,在您的EchoData類中,您將看不到您在Main方法中設置的值。

0

這很難說,因爲您還沒有一個完整的,可編譯的樣品,並且您還沒有確切地解釋了什麼是「無法訪問」的意思(你得到一個錯誤?是什麼呢?)

但是,我的猜測是,您正嘗試從基於您的代碼的類級別訪問傳入的對象字段。

即你正在試圖做到這一點:

class Echodata 
{ 
    public Class1 newobject; // you don't need to initialize this 

    public Echodata(Class1 temp) 
    { 
     this.newobject = temp; 
    } 

    newobject.newArray[0] = "Can't do this at the class level"; 
} 

您只能從一個成員方法中訪問nameArray。

class Echodata 
{ 
    public Class1 newobject; // you don't need to initialize this 

    public Echodata(Class1 temp) 
    { 
     this.newobject = temp; 
    } 

    public void DoSOmething() { 
     newobject.newArray[0] = "This works just fine"; 
    } 
} 
相關問題