类构造函数 作用是为 类中成员变量进行赋值操作
单个类的时候 一般不会有什么思路问题,主要说明一下 有继承关系类的时候
当存在继承关系的类 如 A:B
首先要注意第一点:顺序
那么在构造函数时 顺序是由 B先构造 然后 A在构造
注意第二点方法使用
继承的一特点是为了复用,如果在使用方法却不想复用父类情况时 一般是进行重写操作,
重写之后,方法使用的准则 :实例化的哪个类 需要调用方法 就使用其所在类中方法 若不存在则向上兼容
接下里 用代码 net 8.0控制台 举个经典例子 以及分析
class Program
{
static void Main()
{
try
{
var a1 = new A(1);
var a2 = new A(1,2);
var b1 = new B(1);
var b2 = new B(1,2);
}
catch (Exception ex)
{
throw;
}
}
public class A:B
{
public A(int a1) : base(a1)
{
x = a1;
}
public A(int a1,int a2) :base(a1, a2)
{
x = a2;
}
public int x;
public override void test()
{
Console.WriteLine("这是A"+x);
}
}
public class B
{
public B(int c1)
{
y = c1;
test();
}
public B(int c1,int c2)
{
y = c2;
test();
}
public int y;
public virtual void test()
{
Console.WriteLine("这是B"+y);
}
}
}
输出结果为
可能不知道的技术点
1.base 用法 目的为了区分使用 当父类多个构造函数时使用几个参数的构造函数
2.重写 1 需要父类设置方法为virtual虚方法 2 需要子类就行override 重写方法
这个技术点就是为了 满足可复用 同时也可自定义扩展
也就是规则相同能省则省,不相同就自己写
具体分析如下 以a2 和 b2实例化分析
a2.
先按照顺序思路
实例化a2 对象是 因为继承关系 会先去B类中构造,因为B多个构造函数 a2继承的是俩个参数的 所以会进入 带有c2参数的构造,但使用了test方法,此时判断A类中有此名的方法那么直接执行A中test方法
注意:因为构造函数顺序时B构造后再构造A
所以此时 方法是在执行A中方法 但是 构造A的步骤还没到达 所以 此时x为0 输出 A0
b2
先按照顺序思路实例化 直接去B类中构造 找到2个参数的对应构造 y=2,接下来执行test方法,发现B类中就有 执行B中test方法 输出B2