《C#图解教程(第五版)》- 7.11 实例构造函数

为什么要定义一个构造函数?

所谓“构造函数”,就是在创建对象时被自动调用的方法。构造函数主要用于在创建对象时给它的相关字段一个有意义的初始值。定义一个类时,即使你没有显式地定义一个构造函数,C#编辑器也会默认给你的类加上一个没有参数的“默认构造函数”。构造函数看起来很像类声明中的其他方法。

  • 构造函数的名称和类名相同
  • 构造函数不能有返回值

示例:下面的类使用构造函数初始化其字段

using System;

namespace ConsoleApp1
{
    class MyClass
    {
        public DateTime TimeOfInstantiation;               //字段

        public MyClass()                                   //构造函数
        {
            TimeOfInstantiation = DateTime.Now;            //初始化字段
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyClass test = new MyClass();                   //实例化MyClass对象
            Console.WriteLine(test.TimeOfInstantiation);    //调用对象的字段
        }
    }
}

执行上面的代码,效果如下图所示。

带参数的构造函数

  • 构造函数可以带参数。
  • 构造函数可以被重载。程序实际运行时,依据参数决定调用哪个构造方法。

示例:在下面的代码中,Class1有3个构造函数,一个不带参数、一个带int参数、一个带string参数。Main使用各个构造函数分别创建实例。

using System;

namespace ConsoleApp1
{
    class Class1
    {
        int Id;
        string Name;

        public Class1()                      //构造函数0
        {
            Id = 28;
            Name = "Nemo";
        }

        public Class1(int val)               //构造函数1
        {
            Id = val;
            Name = "Nemo";
        }

        public Class1(string name)           //构造函数2
        {
            Name = name;
        }

        public void SoundOff()
        {
            Console.WriteLine($"Name {Name},Id {Id}");
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            Class1 a = new Class1();         //调用构造函数0
            Class1 b = new Class1(7);        //调用构造函数1
            Class1 c = new Class1("Bill");   //调用构造函数2

            a.SoundOff();
            b.SoundOff();
            c.SoundOff();
        }
    }
}

执行上面的代码,效果如下图所示。

默认构造函数

如果在类的声明中没有显式地提供实例构造函数,那么编译器会提供一个没有参数、方法体为空的隐式地默认构造函数。如果你为类声明了任何构造函数,那么编译器将不会为该类定义默认构造函数。

示例:下面代码中的Class2声明了两个构造函数,当在Main中,试图使用不带参数的构造函数创建新的实例就会报错。

using System;

namespace ConsoleApp1
{
    class Class2
    {
        int Id;
        string Name;

        public Class2(int value)                  //构造函数0
        {
            Id = value;
        }

        public Class2(string value)               //构造函数1
        {
            Name = value;
        }
       
    }

    class Program
    {
        static void Main(string[] args)
        {
            Class2 a = new Class2();             //错误!没有无参数的构造函数          
        }
    }
}

执行上面的代码,Visual Studio会提示Class2不包含无参的构造函数。

未经允许不得转载:透视数据 » 《C#图解教程(第五版)》- 7.11 实例构造函数