谁帮我解释下这段c#代码啊

2025-03-03 19:11:46
推荐回答(5个)
回答1:

这个题是考最后会输出什么吧?这个题主要考抽象类,虚方法和多态。
输出结果如下:
A
B
A.Fun()

为什么?

首先,类A是个抽象类,内部有个构造器和虚方法,在构造器中输出A,在虚方法中输出A.Fun(),然后,类B继承自类A,那么类B具备类A的所有特点,在类B中用new来隐藏了父类A的虚方法,注意,不是重写,只是隐藏了,对父类的方法没有影响的,如果把new换成override就有影响了,如果把new去掉就形成了多态,(对同一命令作出不同的状态,或说对同一方法执行不同的命令,这里我听过一个比较好的例子,比如理发师,演员和医生,当对理发师说剪切那么他会开始剪头发,对演员说剪切,那么他会停止表演,对医生说剪切,他会。。)最后,在主函数中实例化了一个类B的实例,为什么是不是类A,明明写着A a...吗?这是一个重点,类A是abstract(抽象类),抽象类是不能被实例化的,所以只有把它实例化成类B,也就是它的子类,如果你直接写成A a=new A()就不能编译。在实例化的时候先执行父类A的构造器,所以这里输出A,然后执行自己B类的构造器,所以输出B,最后主函数中调用a.Fun()的时候调用的是A类的Fun,抽象类的方法只能在子类中调用,之前提到它被子类B隐藏了,而非重写,所以输出A.Fun().不知道能明白吗?如果不能联系我,相互学习。

回答2:

这个很像C#考试题,拿来运行一下就知道了

回答3:

定义了一个抽象类A 里面有一个 虚方法Fun()
定义了一个类B 继承A 复写了fun();
有个静态方法 main()
里面声明了一个 A类 然后用B 实例化了这个A类(因为B继承A的关系所以)
然后调用了 fun()方法

回答4:

建议楼主先看ppop3的理论,我只解释运行情况
A
B
A.Fun()

A a=new B();这句话实例化一个B对象,首先因为B是对A的泛华,构造对象的时候首先从基类开始,于是先输出A然后B,
A.Fun() 如果B类的Fun方法没有关键字new,那么这将是一个多态,也即A.Fun()方法将调用B类的同名方法,现在加上了new关键字,new关键字屏蔽基类同名方法,多态失效,A.Fun()时将直接调用A类方法。
ps建议楼主去看2个知识点第一“多态”第二“new关键字的用法”。

回答5:

a是基类 b是a的继承类