class A
{
}class B
{
A a; B()
{
a = new A();
}
}和class A
{
}class B
{
A a = new A(); B()
{
}
}然后调用B b = new B();
b.xxx
这两种写法效果好象是一样的,但具体有什么区别呢?
第二种方式那个 A a = new A(); 也是在创建类实例 new B() 的时候才 new 的吧?还是在编译时 new 的?哪位能给我讲讲,多谢!
{
}class B
{
A a; B()
{
a = new A();
}
}和class A
{
}class B
{
A a = new A(); B()
{
}
}然后调用B b = new B();
b.xxx
这两种写法效果好象是一样的,但具体有什么区别呢?
第二种方式那个 A a = new A(); 也是在创建类实例 new B() 的时候才 new 的吧?还是在编译时 new 的?哪位能给我讲讲,多谢!
{
}
class B
{
A a; B()
{
a = new A();
}
}这里的new A();是在创建类B的对象时new的。
class A
{
}class B
{
A a = new A(); B()
{
}
}这里 A a = new A();
这里a作为类B的成员,并初始化。
实例字段的变量初始值设定项不能引用正在创建的实例。因此,在变量初始值设定项中引用 this 是编译时错误,同样,在变量初始值设定项中通过简单名称引用任何一个实例成员也是一个编译时错误。在下面的示例中class A
{
int x = 1;
int y = x + 1; // Error, reference to instance member of this
}
y 的变量初始值设定项导致编译时错误,原因是它引用了正在创建的实例的成员。--->摘自MSDN
class Test
{
static int a = b + 1;
static int b = a + 1;
static void Main() {
Console.WriteLine("a = {0}, b = {1}", a, b);
}
}
显示此行为。尽管 a 和 b 的定义是循环的,此程序仍是有效的。它产生以下输出:a = 1, b = 2
这是因为静态字段 a 和 b 在它们的初始值设定项执行之前被初始化为 0(int 的默认值)。当 a 的初始值设定项运行时,b 的值为零,所以 a 被初始化为 1。当 b 的初始值设定项运行时,a 的值已经为 1,因此 b 被初始化为 2。--->摘自MSDN