interface IA
{ void Foo(); } class CA : IA
{ public void Foo()
{ Console.WriteLine("AAAAAAAAAAAAAAAAAAAAAAAAA"); } } class CB : CA, IA
{ public new void Foo()
{ Console.WriteLine("+++++++++++++++++++++"); } } class Test
{ public static void InvokeFoo(CA ia)
{ ia.Foo(); } public static void Main()
{
InvokeFoo(new CA()); InvokeFoo(new CB());
}
}
{ void Foo(); } class CA : IA
{ public void Foo()
{ Console.WriteLine("AAAAAAAAAAAAAAAAAAAAAAAAA"); } } class CB : CA, IA
{ public new void Foo()
{ Console.WriteLine("+++++++++++++++++++++"); } } class Test
{ public static void InvokeFoo(CA ia)
{ ia.Foo(); } public static void Main()
{
InvokeFoo(new CA()); InvokeFoo(new CB());
}
}
解决方案 »
- 请教大家一个WinForm连接数据库的问题,连接串如下
- 通过委托实现窗口刷新
- C# 如何让引用类型变成值类型的赋值
- 这个实数的正则表达式如何写?
- 请教Thread问题
- 如何用c#得到“Win32_ProcessStartup”对象?情指教。。。。
- 在webform中如何实现listview的效果?
- DataSet 数据分组成多个DataSet
- winform多线程与委托的问题
- 下午2:00启动程序(不是每天,而是根据数据库里的值)用timer还是sleep
- 微软的软件开发平台如.NET系列,是用什么语言开发的
- 关于编译后文件支持的一个问题!!!!!!!!!!!!!!!@##^#%$#!@$@#$@#$!@#!@#!%$#@%$
{
ia.Foo();
}上面的这个方法接收一个CA类型作为参数,那么里面ia.Foo();方法自然就是调用CA类中的Foo()方法,
第一个InvokeFoo(new CA()); 就输出了一行AAAA..
第二个InvokeFoo(new CB()); ,它创建了一个CB类的实例,由于CB类又是CA类的子类,所以,在执行这个方法的时候,
CB类实例的类型被自动转换为CA类的类型,故又一次执行了CA类中的Foo()方法,再次输出一行AAA...
InvokeFoo(new CB());
因为
public static void InvokeFoo(CA ia)所以 new CB() 构造出来的是一个 CA 类型的实例..所以你 new CB()获取的对象中的属性包含CA的属性和CB的属性,但是方法表指向的是 CA 类型的方法表懂了没?, \不懂就说
等分
第二行是因为CB继承了CA并用new隐藏了CA的方法Foo.
当InvokeFoo(new CB())时候,实际调用的是父类CA的方法
关键是new....