- 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。当我们分别使用这两个构造函数来实例化对象时,可以看到它们分别起到了不同的作用。
如果一个类包含了无参构造函数(默认构造函数),而且你又显式地定义了有参构造函数,那么有参构造函数会覆盖无参构造函数。
这是因为在创建类的实例时,如果提供了参数,编译器或解释器会优先选择调用有参构造函数来进行实例化;而如果没有提供参数,才会调用无参构造函数。
在这种情况下,如果你希望保留无参构造函数并且同时使用有参构造函数,你需要显式地定义无参构造函数,以确保它不会被有参构造函数所覆盖。