C# —— 构造函数

什么是构造函数

 构造函数: 一般在函数为类的属性初始值的作用,构造函数的名称类名

 在类里面定义构造函数 方法名和类名同名 不能带返回值类型 void/非void 不能有

// 创建一个构造函数

class People
{
    public string Name { get; set; }
    public int Age { get; set; }
    private bool isChengNian;

    // 在类里面定义构造函数 方法名和类名同名 不能带返回值类型 void/非void 不能有
    // 构造函数
    public People()
    {
        Console.WriteLine(this.Name+Age+isChengNian);
    }

}
class HaiZei
{
    public string Name;
    public string Skill;
    public int Age;

    // 构造函数带参数
    public HaiZei(string name,string skill, int age)
    {
        // 把参数赋值给属性
        Name = name;
        Skill = skill;
        Age = age;
        Console.WriteLine(Name + Skill + Age );
    }
}


class Aircraft
{
    public string Sign { get; set; }
    public string Model { get; set; }
    public string Colour { get; set; }
    public string Subjection { get; set; }
    public double Speed { get; set; }
    public int AllCount { get; set; }
    public string Type { get; set; }
    public int Count { get; set; }
    public Aircraft(string name,string model,string colour,string subjection,double sp,int all)
    {
        Sign = name;
        Model = model;
        Colour = colour;
        Subjection = subjection;
        Speed = sp;
        AllCount = all;
        if (all  >= 400)
        {
            Type = "大";
        }
        else if (all >= 200 )
        {
            Type = "中";
        }
        else
        {
            Type = "小";
        }
        Random r = new Random();
        Count = r.Next(AllCount + 1);
    }

 创建People 对象  构造函数已经调用,虽然在此处给这个属性赋值了,但是这个构造函数里面 并没有把这个初始值赋值给属性,在构造函数里面舒勇属性的时候 值为默认值

 ArrayList a1 = new ArrayList();
 ArrayList a2 = new ArrayList(100);
 People p1 = new People() { Name = "张三",Age=10};
 Console.WriteLine(p1.Name);

 2为了解决在构造函数里面能够使用已经赋值过得属性,需要添加带参数的构造函数,通过参数传递给属性,
创建海贼对象 调用构造函数的时候把参数赋值给属性

    HaiZei lufei = new HaiZei("王路飞", "五档", 20) { Name="索隆",Skill="阿修罗",Age=20};

    HaiZei jide = new HaiZei("基德", "磨磁人", 20);

    Aircraft f1 = new Aircraft("波音", "747", "黄色", "南方航空", 100, 400);
    Console.WriteLine(f1.Type + f1.Count);

    Console.ReadLine();
}

### 使用方法 #### 构造函数链 在 C# 中,构造函数链可通过 `this` 关键字实现,在一个构造函数中调用同一个类中的另一个构造函数,以此简化代码,避免重复代码。例如: ```csharp public class Person { public string Name { get; } public int Age { get; } public string Country { get; } // 主构造函数(包含所有参数) public Person(string name, int age, string country) { Name = name; Age = age; Country = country; } // 复用主构造函数,为Country提供默认值 public Person(string name, int age) : this(name, age, "China") { // 此处可添加额外逻辑(可选) } // 复用前一个构造函数,进一步简化参数 public Person(string name) : this(name, 18) { // 此处可添加额外逻辑(可选) } } ``` #### 构造函数重载 构造函数也能进行重载,即一个类可以有多个构造函数,它们的参数列表不同。比如: ```csharp class Student { // name 和 age 都是成员变量 public string name; public int age; // 无参构造函数 public Student() { } public Student(int age) { this.age = age; } // 全参(有参)构造函数 public Student(int age, string name) { this.age = age; this.name = name; } } ``` #### 继承中的构造函数调用 子类实例化时,默认调用父类的无参构造函数,子类可通过 `base` 关键字代表父类,调用父类的构造函数。执行顺序是先父类后子类,即爷——爹——儿——孙。示例代码如下: ```csharp class Parent { public Parent() { // 父类构造函数逻辑 } } class Child : Parent { public Child() : base() { // 子类构造函数逻辑 } } ``` ### 特点 - 构造函数的名称与类的名称必须完全相同,且没有任何返回类型 [^3]。 - 当声明一个子类时,先执行父类的构造函数,再执行子类的构造函数,也就是先构造出父类的特征,再构造子类的特征 [^5]。 - 父类的无参构造函数很重要,子类实例化时默认调用父类的无参构造函数 [^5]。 ### 相关知识 构造函数常用于对象的初始化操作,如给成员变量赋初值。在参数较多的场景,或需要为某些参数提供默认值的场景中,构造函数链可复用初始化逻辑,避免代码冗余 [^1][^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值