Welcome

首页 / 软件开发 / C# / C# Object Initialization[完整版]

C# Object Initialization[完整版]2011-05-23原文地址:http://www.csharp411.com/c-object-initialization/

当构造一个C#对象时,理解对象的作用域和构造器被初始化的序列是很重要的

Derived static fields

Derived static constructor

Derived instance fields

Base static fields

Base static constructor

Base instance fields

Base instance constructor

Derived instance constructor

示例

下面的是一个C#控制台程序的例子,这个例子演示了对象初始化的次序

这个程序创建基对象的派生对象,包含了静态化和实例化构造器以及作用域,两个作用域"Field1"和"Field2"在他们的定义里被初始化,然而 "Field3"在构造器里被初始化.同时也包含了一个证明为什么不能从构造器里调用虚方法的虚方法.当每个作用域和构造器被初始化时就会写入控制台,因此你可以看到初始化的序列

using System;

namespace ObjectInit
{
class Program
{
static void Main( string[] args )
{
Derived d = new Derived();
Console.ReadLine();
}
}
class Base
{
public Base()
{
Console.WriteLine( "Base.Instance.Constructor" );
this.m_Field3 = new Tracker( "Base.Instance.Field3″ );
this.Virtual();
}
static Base()
{
Console.WriteLine( "Base.Static.Constructor" );
}
private Tracker m_Field1 = new Tracker( "Base.Instance.Field1″ );
private Tracker m_Field2 = new Tracker( "Base.Instance.Field2″ );
private Tracker m_Field3;
static private Tracker s_Field1 = new Tracker( "Base.Static.Field1″ );
static private Tracker s_Field2 = new Tracker( "Base.Static.Field2″ );
virtual public void Virtual()
{
Console.WriteLine( "Base.Instance.Virtual" );
}
}
class Derived : Base
{
public Derived()
{
Console.WriteLine( "Derived.Instance.Constructor" );
this.m_Field3 = new Tracker( "Derived.Instance.Field3″ );
}
static Derived()
{
Console.WriteLine( "Derived.Static.Constructor" );
}
private Tracker m_Field1 = new Tracker( "Derived.Instance.Field1″ );
private Tracker m_Field2 = new Tracker( "Derived.Instance.Field2″ );
private Tracker m_Field3;
static private Tracker s_Field1 = new Tracker( "Derived.Static.Field1″ );
static private Tracker s_Field2 = new Tracker( "Derived.Static.Field2″ );
override public void Virtual()
{
Console.WriteLine( "Derived.Instance.Virtual" );
}
}
class Tracker
{
public Tracker( string text )
{
Console.WriteLine( text );
}
}
}