using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Generic;
using System.Text;
namespace 类的继承问题02
{
class Program
{
static void Main(string[] args)
{
//B Ba = new B();
//A Aa = Ba;
//Aa.BaseMethod();
{
class Program
{
static void Main(string[] args)
{
//B Ba = new B();
//A Aa = Ba;
//Aa.BaseMethod();
A Aa = new A();
Aa.BaseMethod();//调用自身的BaseMethod()方法
Aa.BaseMethod();//调用自身的BaseMethod()方法
B Ba = new B();
Ba.BaseMethod();
/*调用自身的BaseMethod()方法。同时B类虽然派生于A类, 但B类用new保留字把
基类A中的BaseMethod()方法隐藏了,所以A类中的BaseMethod()方法对B类是不可见的
*/
Ba.BaseMethod();
/*调用自身的BaseMethod()方法。同时B类虽然派生于A类, 但B类用new保留字把
基类A中的BaseMethod()方法隐藏了,所以A类中的BaseMethod()方法对B类是不可见的
*/
//C Ca = new C();
//A Aa = Ca;
//Aa.BaseMethod();
//A Aa = Ca;
//Aa.BaseMethod();
//if (Aa != null)
//{
// Console.WriteLine("Aa已经初始化");
//{
// Console.WriteLine("Aa已经初始化");
//}
//else
//{
// Console.WriteLine("Aa没有被初始化");
//}
//else
//{
// Console.WriteLine("Aa没有被初始化");
//}
Console.ReadKey();
}
}
class A
{
public virtual void BaseMethod() //基类的这个方法也可以不是虚拟的,即可以把virtual去掉
{
Console.WriteLine("ABaseMethod");
}
}
class B : A
{
public new virtual void BaseMethod() //public和new可以互换位置,因为他们都是修饰符,所以可以调换位置
{
Console.WriteLine("BBaseMethod");
}
}
}
class A
{
public virtual void BaseMethod() //基类的这个方法也可以不是虚拟的,即可以把virtual去掉
{
Console.WriteLine("ABaseMethod");
}
}
class B : A
{
public new virtual void BaseMethod() //public和new可以互换位置,因为他们都是修饰符,所以可以调换位置
{
Console.WriteLine("BBaseMethod");
}
}
class C : A //C和B都继承自A,同时他们都把A中的BaseMethod()方法隐藏了,A类中的virtual可以有也可以没有都可以隐藏基类的BaseMethod()方法
{
public new void BaseMethod()
{
Console.WriteLine("CBaseMethod");
}
}
class D : A
{
public virtual void BaseMethod() //省去new则发出警告,所以说省去new也可以隐藏基类的方法
{
Console.WriteLine("CBaseMethod");
}
}
class E : A
{
public void BaseMethod() //省去new则发出警告,所以说省去new也可以隐藏基类的方法
{
Console.WriteLine("CBaseMethod");
}
}
}
//省去new则发出警告,产生两个警告的原因是:编译器是怕你不小心隐藏了某个不该隐藏的基类成员
class C : A //C和B都继承自A,同时他们都把A中的BaseMethod()方法隐藏了,A类中的virtual可以有也可以没有都可以隐藏基类的BaseMethod()方法
{
public new void BaseMethod()
{
Console.WriteLine("CBaseMethod");
}
}
class D : A
{
public virtual void BaseMethod() //省去new则发出警告,所以说省去new也可以隐藏基类的方法
{
Console.WriteLine("CBaseMethod");
}
}
class E : A
{
public void BaseMethod() //省去new则发出警告,所以说省去new也可以隐藏基类的方法
{
Console.WriteLine("CBaseMethod");
}
}
}
//省去new则发出警告,产生两个警告的原因是:编译器是怕你不小心隐藏了某个不该隐藏的基类成员