2015-10-19 1 views
-1
public class s 
{ 
    public string s1 { get; set; } 
} 

public class s2 
{ 
    public s s3 { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     s2 objs2 = new s2(); 
     objs2.s3.s1 = "asdf"; 
    } 
} 

получение ошибки во время выполнения, поскольку objs2.s3 имеет значение null. Я хочу знать, как добиться этого.класс объект null при объявлении является классом C#

Пожалуйста, также дайте мне знать, почему это происходит, поэтому, если у вас есть время. спасибо.

+4

Потому что вы никогда не инициализируется 's3' свойство в первую очередь ... –

+0

вы можете объяснить некоторые больше, пожалуйста, или какое-либо решение.? – chanti

ответ

3

Вы никогда не инициализируете s3 в любом месте. Если вы всегда хотите, чтобы по умолчанию новый экземпляр s, вы можете создать конструктор:

public class s2 
{ 
    public s2() 
    { 
     s3 = new s(); 
    } 
} 

s2 objs2 = new s2(); 

Или, если вы не хотите, чтобы изменить s2, вы можете просто инициализировать значение при создании экземпляра объекта :

s2 objs2 = new s2 { s3 = new s() }; 
+0

избили меня :) – HaukurHaf

1

Класс s является нулевым, поэтому свойство s3 по умолчанию равно null. Вам необходимо создать экземпляр перед использованием.

Одним из способов было бы, чтобы конструктор класса s2 создал для вас экземпляр.

Он бы тогда:

public class s2 
{ 
    public s s3 { get; set; } 
    public s2() 
    { 
     s3 = new s(); 
    } 
} 
2

для того, чтобы программа работала, необходимо инициализировать s3 свойство s2 экземпляра с оператором new, потому что это ссылочный тип (check reference vs value types here).

Это линия, что вам не хватает:

s2.s3 = new s(); 

А вот полный код, который будет работать правильно:

public class s 
{ 
    public string s1 { get; set; } 
} 

public class s2 
{ 
    public s s3 { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     s2 objs2 = new s2(); 
     s2.s3 = new s(); 
     objs2.s3.s1 = "asdf"; 
    } 
} 
1

дополнительно к другому ответу вы можете inisialise s3 в Main ().

s2 objs2 = new s2() 
{ 
    s3 = new s() 
}; 
Смежные вопросы