public class C1
{
public virtual void m1()
{
Console.WriteLine("C1:m1");
} public void m2()
{
Console.WriteLine("C1:m2");
}
}
public class C2 : C1
{
public override void m1()
{
Console.WriteLine("C2:m1");
}
public void m2()
{
Console.WriteLine("C2:m2");
} public virtual void m3()
{
Console.WriteLine("C2:m3");
} }//使用:
C1 c = new C2();
c.m1(); //C2:m1
c.m2(); //C1:m1
//c.m3(); //在C1中没有这个方法
问题:
类型转到上一级(父类),则子类可视的成员、方法减少。所以这一句
//c.m3(); //在C1中没有这个方法
是可以理解。但这句
c.m1(); //C2:m1
就不明白。可视的成员、方法减少了,它怎么还能看到C2.m1()呢?
虽然重写方法的原理也了解。但还是想不通。请哪位大侠给小弟讲解一下。
{
public virtual void m1()
{
Console.WriteLine("C1:m1");
} public void m2()
{
Console.WriteLine("C1:m2");
}
}
public class C2 : C1
{
public override void m1()
{
Console.WriteLine("C2:m1");
}
public void m2()
{
Console.WriteLine("C2:m2");
} public virtual void m3()
{
Console.WriteLine("C2:m3");
} }//使用:
C1 c = new C2();
c.m1(); //C2:m1
c.m2(); //C1:m1
//c.m3(); //在C1中没有这个方法
问题:
类型转到上一级(父类),则子类可视的成员、方法减少。所以这一句
//c.m3(); //在C1中没有这个方法
是可以理解。但这句
c.m1(); //C2:m1
就不明白。可视的成员、方法减少了,它怎么还能看到C2.m1()呢?
虽然重写方法的原理也了解。但还是想不通。请哪位大侠给小弟讲解一下。
解决方案 »
- RadioButtonList 问题
- 跪求:在一个GridView中传参数
- 字符串转换xmlNode
- 请教多线程进行数据库更新
- 自定义组建能不能直接拖放到窗体上?
- 求教大神,怎么把sqlserver select查询出来的语句通过c# 代码插入到已经建立的空datagridview上
- 系统托盘里显示ioc图标后,点ico图标就会出来主窗体,但是,是最小化状态,怎么让它还原成原来那么大??
- Hashtable静态成员怎么实例化?在Java中很方便,C#中有对应的方法吗?
- 请教如何学习XML(100)
- c#中如何弹出对话框,和vb中的msgbox一样?
- 在安装MSI文件之前,怎么判定目标主机是否已安装.net1.1和.net2.0?
- SQL 查询问题
c其实还是一个C2的实例,他的虚方法是被覆盖过的
c其实还是一个C2的实例,他的虚方法是被覆盖过的
---------------------------------------------------------c其实还是一个C2的实例,即然是C2的实例。为什么看不到m3(),而看到m1()?
对外界而言,C只能执行所有C1类能做的事,所以它只能用m1,m2
但是C1类的m1被重写过,所以虽然C有m1方法,但现在调用的是子类(C2)的m1方法只有m3,根本和C1没有关系,所以C访问不到m3除非 ((C2)C).m3();