代码如下
public class Father
{
public void DoWork()
{
Console.WriteLine("Father.DoWork()");
} public virtual void DoVirtualWork()
{
Console.WriteLine("Father.DoVirtualWork()");
} public virtual void DoVirtualAll()
{
Console.WriteLine("Father.DoVirtualAll()");
}
} public class Son : Father
{
public static void DoStaticWork()
{
Console.WriteLine("Son.DoStaticWork()");
} public new void DoWork()
{
Console.WriteLine("Son.DoWork()");
} public new virtual void DoVirtualWork()
{
base.DoVirtualWork();
Console.WriteLine("Son.DoVirtualWork()");
} public override void DoVirtualAll()
{
Console.WriteLine("Son.DoVirtualAll()");
}
} public class Grandson : Son
{
public override void DoVirtualWork()
{
base.DoVirtualWork();
Console.WriteLine("Grandson.DoVirtualWork()");
} public override void DoVirtualAll()
{
base.DoVirtualAll();
Console.WriteLine("Grandson.DoVirtualAll()");
}
}
class IL_Method_Test
{
public static void Main()//Main_3_5_2
{
Father son = new Son();
son.DoWork();
son.DoVirtualWork(); if (son is Father)
{
Console.WriteLine("He is right.");
} Son.DoStaticWork(); Father aGrandSon = new Grandson();
aGrandSon.DoWork();
aGrandSon.DoVirtualWork();
aGrandSon.DoVirtualAll();
Console.Read();
}
}
public class Father
{
public void DoWork()
{
Console.WriteLine("Father.DoWork()");
} public virtual void DoVirtualWork()
{
Console.WriteLine("Father.DoVirtualWork()");
} public virtual void DoVirtualAll()
{
Console.WriteLine("Father.DoVirtualAll()");
}
} public class Son : Father
{
public static void DoStaticWork()
{
Console.WriteLine("Son.DoStaticWork()");
} public new void DoWork()
{
Console.WriteLine("Son.DoWork()");
} public new virtual void DoVirtualWork()
{
base.DoVirtualWork();
Console.WriteLine("Son.DoVirtualWork()");
} public override void DoVirtualAll()
{
Console.WriteLine("Son.DoVirtualAll()");
}
} public class Grandson : Son
{
public override void DoVirtualWork()
{
base.DoVirtualWork();
Console.WriteLine("Grandson.DoVirtualWork()");
} public override void DoVirtualAll()
{
base.DoVirtualAll();
Console.WriteLine("Grandson.DoVirtualAll()");
}
}
class IL_Method_Test
{
public static void Main()//Main_3_5_2
{
Father son = new Son();
son.DoWork();
son.DoVirtualWork(); if (son is Father)
{
Console.WriteLine("He is right.");
} Son.DoStaticWork(); Father aGrandSon = new Grandson();
aGrandSon.DoWork();
aGrandSon.DoVirtualWork();
aGrandSon.DoVirtualAll();
Console.Read();
}
}
解决方案 »
- C# WinForm的GDI+,显示单个中文字符,总有一部分无法被显示出来。
- FilesystemWatcher触发事件处理中、事件又被触发的处理。
- FileStream构造函数参数的疑问
- C#怎么连接MySql?
- 如何在线程中设置本窗体的一些属性(通过代码),
- C# 开机启动读取配置文件问题,跪求指教
- 关于给定数字让Structure排序问题,请教高手!!!!分不够再加
- 请教两个 简单的.NET使用问题
- 关于打印的问题
- 我有一个MDI子窗体,做成了DLL了。我如何在它里面引用MDI父窗体的statusBar? MDI窗体不在DLL中。
- C# From_Load和Button_Click 问题??
- 为何(?<aid>.*?),(?<mp>.*?),(?<time>.*?),(?<msg>.*?)找不到msg?
1. 非虚方法(Father.DoWork)不具有多态性,因为它不能被override
2. 用new修饰的方法,在编译期按变量类型调用.(如Father类型的变量son.DoWork(), aGrandSon.DoWork();)
3. is 操作符会在运行期检查变量的实际类型是否是右边的或它的子类型.(所以he is right.)
4. 静态方法总是按类型调用.
5. "aGrandSon.DoVirtualWork();" 我也没搞明白:)
6. "aGrandSon.DoVirtualAll();"体现了多态性.它的base是Son.DoVirtualAll.尽管变量类型Father.
"静态方法总是按类型调用. "
这两句话什么意思??
编译期多态是指通过重载, new,及非虚定义的方法,这些方法在编译时,c#编译器就能确定下来调用哪一个.
运行期多态是指,在运行时CLR才能确定调用它个类中的方法的技术.静态方法,非虚方法,new的方法不具有运行期多态.所以按变量类型调用.
是override的father,重写方法不被视为是在类上进行声明的,而是在基类上声明的方法的新实现。