C#每天复习一个重要小知识day2:有参与无参构造函数

using System;

public class MyClass
{
    private int value;

    // 有参构造函数
    public MyClass(int v)
    {
        this.value = v;
    }

    // 无参构造函数
    public MyClass()
    {
        this.value = 0;
    }

    public static void Main(string[] args)
    {
        // 使用有参构造函数实例化对象
        MyClass obj1 = new MyClass(10);
        Console.WriteLine(obj1.value); // 输出 10

        // 使用无参构造函数实例化对象
        MyClass obj2 = new MyClass();
        Console.WriteLine(obj2.value); // 输出 0
    }
}

在这个示例中,有参构造函数 MyClass(int v) 接受一个整数参数并将其赋值给 value,而无参构造函数 MyClass()value 设置为默认值 0。当我们分别使用这两个构造函数来实例化对象时,可以看到它们分别起到了不同的作用。

什么情况下有参构造函数会被无参构造函数默认覆盖?

如果一个类包含了无参构造函数(默认构造函数),而且你又显式地定义了有参构造函数,那么有参构造函数会覆盖无参构造函数。

这是因为在创建类的实例时,如果提供了参数,编译器或解释器会优先选择调用有参构造函数来进行实例化;而如果没有提供参数,才会调用无参构造函数。

在这种情况下,如果你希望保留无参构造函数并且同时使用有参构造函数,你需要显式地定义无参构造函数,以确保它不会被有参构造函数所覆盖。

你可能感兴趣的:(每天复习一个小知识,c#)