using System;namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class A
{
public void aaa()
{
System.Console.Write("A:aaa");
}
public virtual void bbb()
{
System.Console.Write("A:bbb");
}
}
class B : A
{ public void aaa()
{
System.Console.Write("B:aaa");
}
public override void bbb()
{
System.Console.Write("B:bbb");
}
public void ccc()
{
System.Console.Write("B:ccc");
}
}
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
A a = new A();
B b = new B();
a.aaa();
a.bbb();
b.aaa();
b.bbb();
b.ccc();
/// 问题就在下面的代码中
a = b;
a.aaa();
a.bbb(); Console.ReadLine();
}
}
}问题:
1.a = b 的实质是什么
2.“a.aaa();a.bbb();”第一个方法为什么调用的不是b的aaa() , 而是a的aaa();
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class A
{
public void aaa()
{
System.Console.Write("A:aaa");
}
public virtual void bbb()
{
System.Console.Write("A:bbb");
}
}
class B : A
{ public void aaa()
{
System.Console.Write("B:aaa");
}
public override void bbb()
{
System.Console.Write("B:bbb");
}
public void ccc()
{
System.Console.Write("B:ccc");
}
}
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
A a = new A();
B b = new B();
a.aaa();
a.bbb();
b.aaa();
b.bbb();
b.ccc();
/// 问题就在下面的代码中
a = b;
a.aaa();
a.bbb(); Console.ReadLine();
}
}
}问题:
1.a = b 的实质是什么
2.“a.aaa();a.bbb();”第一个方法为什么调用的不是b的aaa() , 而是a的aaa();
解决方案 »
- Vs2003 无法打开设计器问题。
- 关于Entity framework 执行效率和cpu占用率。。。
- 对文字进行编码以后的URL重写
- 熟悉javascript的大哥哥们来帮忙看看啊!急。。。。。。。在线等!!谢谢了!
- 请教高手们如何在GridView中显示总和
- 一个简单的问题!来拿分吧!
- 跪求大虾。 解决小问题。 关于一个主外键修改问题。。
- 帮忙介绍几种访问sql server存储过程的方法!!最好能有程序代码!!!
- 求一句验证日期的代码?
- 怎样在TABLE的同一个CELL中加上多个BUTTON控件?
- 各位你们现在看到的csdn的论坛的datagrid是怎么做的(顶就有分)
- 如何用Select语句 区分大小写 查询ACCESS数据库里的记录
因为在这时A a = new A();他所实例化的类是A,所以调用的不是b的aaa() 。而在这之后将a = b;因为B : A,a = b时b隐形转换成a,又因为bbb()声明为virtual,更具virtual的定义:对于非虚的方法,无论被其所在类的实例调用,还是被这个类的派生类调用,方法的执行方式不变。而对于虚方法,它的执行方式可以被派生类改变,这种改变是通过方法的重载来实现的。也就是因为B在继承A后override了bbb(),所以在最后的a.bbb();时调用的是重载后bbb()也就是类B的bbb()方法。至于1.a = b 的实质是什么,这个我也不知道:( 麻烦其他人补充。