使用 表达式创建某个的对象时,会使用实例构造函数创建和初始化所有实例成员变量。  要初始化类或非静态类中的静态变量,必须定义静态构造函数。  有关更多信息,请参见 。

下面的示例演示实例构造函数:

 class CoOrds        {                        public int x, y;            // constructor            public CoOrds()            {                x = 0;                y = 0;            }        }

为了清楚起见,此类包含公共字段。  建议在编程时不要使用公共字段,因为这种做法会使程序中任何位置的任何方法都可以不受限制、不经验证地访问对象的内部组件。  数据成员通常应当为私有的,并且只应当通过类方法和属性来访问。

只要创建基于 CoOrds 类的对象,就会调用此实例构造函数。  诸如此类不带参数的构造函数称为“默认构造函数”。  然而,提供其他构造函数通常十分有用。  例如,可以向 CoOrds 类添加构造函数,以便可以为数据成员指定初始值

 public CoOrds(int x, int y)            {                            this.x = x;                            this.y = y;            }

这样便可以用默认或特定的初始值创建 CoOrd 对象,如下所示:

 CoOrds p1 = new CoOrds(); CoOrds p2 = new CoOrds(5, 3);

如果某个类没有构造函数,则会自动生成一个默认构造函数,并使用默认值来初始化对象字段。  例如, 初始化为 0。  有关默认值的更多信息,请参见 。  因此,由于 CoOrds 类的默认构造函数将所有数据成员都初始化为零,因此可以将它完全移除,而不会更改类的工作方式。  本主题的稍后部分的示例 1 中提供了使用多个构造函数的完整示例,示例 2 中提供了自动生成的构造函数的示例。

也可以用实例构造函数来调用基类的实例构造函数。  类构造函数可通过初始值设定项来调用基类的构造函数,如下所示:

 class Circle : Shape        {                    public Circle(double radius) : base(radius, 0)            {            }        }

在此示例中,Circle 类将表示半径和高度的值传递给 ShapeCircle 从它派生而来)提供的构造函数。  使用 ShapeCircle 的完整示例请见本主题中的示例 3。

下面的示例说明包含两个类构造函数的类:一个类构造函数没有参数,另一个类构造函数带有两个参数

 class CoOrds        {                    public int x, y;            // Default constructor:        public CoOrds()            {                x = 0;                y = 0;            }            // A constructor with two arguments:            public CoOrds(int x, int y)            {                this.x = x;                this.y = y;            }            // Override the ToString method:            public override string ToString()            {                return (String.Format("({0},{1})", x, y));            }        }        class MainClass        {            static void Main()            {                CoOrds p1 = new CoOrds();                CoOrds p2 = new CoOrds(5, 3);                                // Display the results using the overriden ToString method:                Console.WriteLine("CoOrds #1 at {0}", p1);                Console.WriteLine("CoOrds #2 at {0}", p2);                Console.ReadKey();            }        }        /* Output:         CoOrds #1 at (0,0)         CoOrds #2 at (5,3)                */

在此示例中,类 Person 没有任何构造函数;在这种情况下,将自动提供默认构造函数,同时将字段初始化为它们的默认值。

public class Person        {                    public int age;                    public string name;        }                class TestPerson        {                    static void Main()            {                Person person = new Person();                Console.WriteLine("Name: {0}, Age: {1}", person.name, person.age);                                // Keep the console window open in debug mode.                Console.WriteLine("Press any key to exit.");                Console.ReadKey();            }        }        // Output:  Name: , Age: 0

注意,age 的默认值为 0name 的默认值为 null。  有关默认值的更多信息,请参见

下面的示例说明使用基类初始值设定项。  Circle 类是从通用类 Shape 派生的,Cylinder 类是从 Circle 类派生的。  每个派生类的构造函数都使用其基类的初始值设定项。

abstract class Shape    {            public const double pi = Math.PI;           protected double x, y;            public Shape(double x, double y)        {                    this.x = x;                    this.y = y;        }                public abstract double Area();    }        class Circle : Shape    {            public Circle(double radius)  : base(radius, 0)        {                }                        public override double Area()        {                    return pi * x * x;        }    }        class Cylinder : Circle    {            public Cylinder(double radius, double height): base(radius)        {            y = height;        }                public override double Area()        {                    return (2 * base.Area()) + (2 * pi * x * y);        }    }        class TestShapes    {                static void Main()        {                    double radius = 2.5;                    double height = 3.0;        Circle ring = new Circle(radius);        Cylinder tube = new Cylinder(radius, height);            Console.WriteLine("Area of the circle = {0:F2}", ring.Area());            Console.WriteLine("Area of the cylinder = {0:F2}", tube.Area());                        // Keep the console window open in debug mode.            Console.WriteLine("Press any key to exit.");            Console.ReadKey();        }    }    /* Output:        Area of the circle = 19.63        Area of the cylinder = 86.39    */

备注:摘自: