2013-04-26 144 views
1

我甚至不确定这个问题的标题是否正确,但我不确定如何描述问题。基本上我有以下两个类:C#类变量的定义类型

class A 
{ 
    public B b { get; set; } 
} 

class B 
{ 
    public string name { get; set;} 
} 

创建我A类的对象后,我试图定义类B变量名像这样:

A classA = new A(); 
A.B.name = "TEST"; 

不过,我不断收到跟随错误:

Object reference not set to an instance of an object.

很明显,我正在做一些完全错误的事情。任何帮助,将不胜感激。

谢谢!

+2

我很惊讶,A.B.name编译。我会说它应该是A.b.name。 – 2013-04-26 15:26:49

回答

1

你需要调用它是这样的:

A classA = new A(); 
classA.b = new B(); 
classA.b.name = "TEST"; 

的问题是,你需要实例化b财产上classA实例创建。

10

您还没有创建B的实例,因此它是null(即在您的实例A中)。你可以例如在构造函数中实例化:

class A 
{ 
    public B b { get; set; } 

    public A() 
    { 
     b = new B(); 
    } 
} 
+2

这就是答案 – PlantationGator 2013-04-26 15:27:33

+2

使用构造函数可能是最好的答案,但其他人在技术上是正确的。 – Eric 2013-04-26 15:28:27

+0

不幸的是,A类和B类都是通过网络服务。我无法改变它们。所以,我不能使用这个解决方案。 – Anonymous 2013-04-26 15:38:48

0

B为空。您需要先实例化B,然后才能引用它。

A classA = new A(); 
classA.B = new B(); 
classA.B.name = "TEST"; 
0

初始化B类

A classA = new A(); 
classA.b = new B(); 
classA.b.name = "TEST"; 
+3

这在语法上是错误的。第一个变量名为classA,所以说A.B = new B()是错误的;它应该是classA.B = new B();这甚至是错误的,因为属性是小写的b,所以它应该是classA.b = new B(); – Jim 2013-04-26 15:29:00

+2

@Jim我会说这个问题首先是错误的,混淆了B和B. – 2013-04-26 15:29:38

+0

这个问题的写法可能很容易混淆类名和变量名,但这并不是错的;这是完全有效的。 – Jim 2013-04-26 15:31:29

0

你需要你的B类的一个实例

A classAInstance = new A(); 
classAInstance.b = new B(); 
classAInstance.b.name = "TEST";