public abstract class A { public A() { Console.WriteLine('A'); } public virtual void Fun() { Console.WriteLine("A.Fun()"); } } public class B : A { public B() { Console.WriteLine('B'); } public new void Fun() { Console.WriteLine("B.Fun()"); } } class Program { static void Main(string[] args) { A a = new B(); a.Fun(); Console.ReadKey(); } }
如果把B类中的new改为override的话
输出结果就为
A
B
B.Fun()
取自http://www.cnblogs.com/jiekzou/p/4457384.html
解答:[http://bbs.csdn.net/topics/390099393]
C#中,如果子类没有显示调用父类的有参构造函数:那么它会自动调用父类的无参构造函数;如果父类没有无参构造函数,将通不过编译。
补充:一般是这么调用父类的有参构造函数的
class A { internal int number; public A(int n) { number = n; Console.WriteLine("A的构造函数"); } } class B : A { public B(int n) : base(n) { Console.WriteLine("B的构造函数"); } } class Program { static void Main(string[] args) { A a = new B(3); Console.WriteLine(a.number); Console.ReadKey(); } }