MSDN:构造函数

任何时候,只要创建结构,就会调用它的构造函数。类或结构可能有多个接受不同参数的构造函数。构造函数使得程序员可设置默认值、限制实例化以及编写灵活且便于阅读的代码。

默认

public class Taxi

{

    public bool isInitialized;

    public Taxi()

    {

        isInitialized = true;

    }

}

 

class TestTaxi

{

    static void Main()

    {

        Taxi t = new Taxi();

        System.Console.WriteLine(t.isInitialized);

    }

}

私有

class NLog

{

    // Private Constructor:

    private NLog() { }

 

    public static double e = System.Math.E; //2.71828...

}

如果类没有默认构造函数,将自动生成一个构造函数,并且将用默认值来初始化对象字段,例如,int被初始化为 0

class Circle : Shape

{

    public Circle(double radius)

        : base(radius, 0)

    {

    }

}

静态

静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。

静态构造函数具有以下特点:

·                 静态构造函数既没有访问修饰符,也没有参数。

·                 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化

·                 无法直接调用静态构造函数。

·                 在程序中,用户无法控制何时执行静态构造函数。

·                 静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。

·                 静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。

public class Bus

{

    // Static constructor:

    static Bus()

    {

        System.Console.WriteLine("The static constructor invoked.");

    }

 

    public static void Drive()

    {

        System.Console.WriteLine("The Drive method invoked.");

    }

}

 

class TestBus

{

    static void Main()

    {

        Bus.Drive();

    }

}

复制构造函数

与有些语言不同,C# 不提供复制构造函数。如果您创建了新的对象并希望从现有对象复制值,您必须自行编写适当的方法。

class Person

{

    private string name;

    private int age;

 

    // Copy constructor.

    public Person(Person previousPerson)

    {

        name = previousPerson.name;

        age = previousPerson.age;

    }

 

    // Instance constructor.

    public Person(string name, int age)

    {

        this.name = name;

        this.age = age;

    }

 

    // Get accessor.

    public string Details

    {

        get

        {

            return name + " is " + age.ToString();

        }

    }

}

 

class TestPerson

{

    static void Main()

    {

        // Create a new person object.

        Person person1 = new Person("George", 40);

 

        // Create another new object, copying person1.

        Person person2 = new Person(person1);

        System.Console.WriteLine(person2.Details);

    }

}

posted @ 2010-06-01 08:24  gege_s  Views(202)  Comments(0)    收藏  举报