public class A
{
public void DoSomething()
{
System.Console.WriteLine("A.Dosomething");
}
}
public class B:A
{
public void DoSomethingElse()
{
System.Console.WriteLine("B.DosomethingELSE");
}
public new void DoSomething()
{
System.Console.WriteLine("B.Dosomething");
}
}
public class EntryPoint
{
static void Main()
{
B b=new B();
b.DoSomething();b.DoSomethingElse();
A a=b;//这儿有点不明白,实例化A又让它等于b干什么?
a.DoSomething();
}}
{
public void DoSomething()
{
System.Console.WriteLine("A.Dosomething");
}
}
public class B:A
{
public void DoSomethingElse()
{
System.Console.WriteLine("B.DosomethingELSE");
}
public new void DoSomething()
{
System.Console.WriteLine("B.Dosomething");
}
}
public class EntryPoint
{
static void Main()
{
B b=new B();
b.DoSomething();b.DoSomethingElse();
A a=b;//这儿有点不明白,实例化A又让它等于b干什么?
a.DoSomething();
}}
这个是定义一个类型为A 的小a变量,比如说A为中国,B就是广西,那你就可以把广西说成中国.
麻雀.飞
大雁.飞
猫头鹰.飞。
但如果在鸟类型上定义一个虚方法 .飞
每种具体的鸟自己重写飞的实现。
就可以通过循环来写了
鸟[] bird= new 鸟[] { 麻雀,大雁,猫头鹰};
foreach (int b in bird)
{
b.飞
}
a是基类,
b是a的派生类
b.DoSomething();b.DoSomethingElse();
A a=b;//这儿有点不明白,实例化A又让它等于b干什么?基类引用可以指向派生类的实例
我想问一下,这样理解对不对:
如果有个鸟没有自己的飞的话,就会直接引用公共的基类?foreach循环就能直接循环下去
麻雀.私有飞
大雁.公共飞
猫头鹰.私有飞如果没有这样机制的话,就要一个一个的进行付值或者定义,会比较麻烦一些?这样理解对不对?
可以执行 b的 DoSomethingElse()
又可以执行 a的DoSomething()
你可以把代码复制一下试试,如果我这样写:A a=b;
执行 a.dosomething() 显示:"A.Dosomething"
写 a.elsedosomething() 则编译就会出错!这样说,一个基类不能直接使用用他子类的方法、属性我现在想不出这样付值来做有什么好处来了!
1 (a as b).elsedosomething()
2 反射好处当然是有的,但说开来就大了
b.DoSomething();
b.DoSomethingElse();
A a=b;//这儿有点不明白,实例化A又让它等于b干什么?
a.DoSomething();这个等同于
B b=new B();
b.DoSomething();
b.DoSomethingElse();
A a=new B();
a.DoSomething();这应该是多态的一种应用吧。