2015-04-06 3 views
0

Я недавно искал в конструкторах, Im в настоящее время пытается передать объект в другой файл класса, Путь им делать это так:Передача объекта другому классу?

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? 
} 

Проблема я не могу получить доступ к объекту, чтобы попасть в массив ..

Какие существуют методы прохождения объектов? Мне сказали, что это примерно то, что нужно сделать, и экспериментировали какое-то время безрезультатно.

+1

Если класс не содержит деклараций конструктора экземпляра, автоматически предоставляется конструктор экземпляра по умолчанию. Этот конструктор по умолчанию просто вызывает беззаметный конструктор прямого базового класса. Если у прямого базового класса нет доступного конструктора экземпляров без параметров, возникает ошибка времени компиляции. Если класс является абстрактным, то объявленная доступность для конструктора по умолчанию защищена. В противном случае объявленная доступность для конструктора по умолчанию является общедоступной. –

+3

Это всегда помогает, если вы предоставляете ** точную ошибку компилятора ** вместе с минимальным случаем воспроизведения. И если нет ошибки компилятора, объясните, что такое ваш образец ввода, каков ваш ожидаемый результат и что такое ** фактический ** выход. –

+1

Ваш код выше даже не компилируется, он будет разбит на эту строку: 'objPls.nameArray [3] =" ryan ";' потому что размер 'nameArray' равен 3, но вы пытаетесь установить четвертый элемент. – ekad

ответ

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"; 
    } 
} 
Смежные вопросы