📄 10-1.cs
字号:
//10-1
using System;
class A
{
public void Func() { Console.WriteLine("Func() in A"); }
public virtual void VO() { Console.WriteLine("BaseClass.VO()"); }
}
class B:A
{
public int j;
new public void Func() { j=2; Console.WriteLine("Func() in B, the new member = "+j); }
public override void VO() { j=2; Console.WriteLine("VO() in B, the new member = "+j); }
public void FromBase(){ base.VO();}
}
class C:B
{
public int k;
new public void Func() { k=3; Console.WriteLine("Func() in C, the new member = "+k); }
public override void VO() {k=3; Console.WriteLine("VO() in C, the new member = "+k); }
}
class D:C
{
public int m;
new public void Func() { m=4; Console.WriteLine("Func() in D, the new member = "+m); }
new public virtual void VO() { m=4; Console.WriteLine("VO() in D, the new member = "+m);}
}
class E:D
{
public int n;
new public void Func() { n=5; Console.WriteLine("Func() in E, the new member = "+n); }
public override void VO() { n=5; Console.WriteLine("VO() in E, the new member = "+n);}
}
class Test
{
static public void VirtualandOverride(A a)
{
a.Func();
a.VO();
}
static void Main()
{
A aa= new A(); //基类对象aa
A ab = new B(); //或者A ab = bb; 基类对象,引用指向派生类对象
B bb = new B(); //派生类对象bb
ab.Func(); //调用非虚方法,输出:“Func() in A”
bb.Func(); //调用非虚方法,输出:“Func() in B, the new member = 2”
aa.VO(); //输出:“BaseClass.VO()”
//Console.WriteLine(ab.j); //错误:A中并不包含对j的定义
ab.VO(); //调用虚方法,输出:“VO() in B, the new member = 2”。ab中没有j,但却通过覆盖的方法使用了j
bb.VO(); //调用虚方法,输出:“VO() in B, the new member = 2”
bb.FromBase(); //输出:“BaseClass.VO()”,表明虽然覆盖了基类的VO(),但是基类的VO()仍然存在
Console.WriteLine(ab.ToString());//输出:“B”,ab的类型是B?
//B ba=ab; //错误: 无法将类型“A”隐式转换为“B”,ab到底是不是B类型?
Console.WriteLine("Testing");
VirtualandOverride(aa); // Func() in A // BaseClass.VO()
VirtualandOverride(ab); // Func() in A // VO() in B, the new member = 2
A ac =new C();
VirtualandOverride(ac); // Func() in A // VO() in C, the new member = 3
A ad =new D();
VirtualandOverride(ad); // Func() in A // VO() in C, the new member = 3
A ae=new E();
VirtualandOverride(ae); // Func() in A // VO() in C, the new member = 3
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -