请问在c#中 Main中 这个是什么意思?

xuxianmei 2009-03-14 01:49:02
class A
{
public virtual void showinfo()//虚方法
{
Console.WriteLine("A1");

}
public void show()
{
Console.WriteLine("A2");

}

}
class B : A
{

public override void showinfo()//重新重载虚方法
{
Console.WriteLine("B1");
}

public new void show()
{

Console.WriteLine("B2");
}

}

上面的是声明的两个类
为什么在
Main中
要这样实现才可以看到虚方法的特性呢

B b = new B();
A a = b;///这一句是我不懂的,为什么会这样? 请高手 大虾们解释一下 谢谢!!
a.showinfo();
b.showinfo();
a.show();
b.show();
...全文
316 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
PandaIT 2009-03-14
  • 打赏
  • 举报
回复
楼上都说了

程序的主入口点!

wuyq11 2009-03-14
  • 打赏
  • 举报
回复
Main方法是程序的入口点,程序控制在该方法中开始和结束。
该方法在类或结构的内部声明。它必须为静态方法,而不应为公共方法
它可以具有 void 或 int 返回类型。
声明 Main 方法时既可以使用参数,也可以不使用参数。
定义一个A对象,指向b地址.
  • 打赏
  • 举报
回复
Main 方法是程序的入口,只能有一个。在程序执行的时候最最先调用Main方法
格拉 2009-03-14
  • 打赏
  • 举报
回复
gisyellow 2009-03-14
  • 打赏
  • 举报
回复
Main方法是应用程序的入口,程序必须顺序执行Main方法中的语句来运行程序。
sandals 2009-03-14
  • 打赏
  • 举报
回复
程序结果为
B1
B1
A2
B2
B b = new B(); //创建一个B类的对象
A a = b;//隐式转换,当在用到父类的时候用子类代替可以,当要用到子类的时候用父类代替则不行。当想把父类转成子类时,必须要显示转换.
a.showinfo(); //由于子类是重写父类方法,所以它以后调用的就是重写后的方法
b.showinfo();
a.show();
b.show();

这个例子主要功能之一就是可以反映出new关键字,和使用virtual和override的组合之间的区别。
如果子类从写了父类的方法,以后就算子类转换成父类了,但是它所执行的永远是重写后的方法。
而使用new关键字,只是覆盖原方法。此时如果把子类转换成父类,那么父类执行的就是自己的方法了。
而不是子类用来覆盖父类的方法。

慢慢体会。
ws_hgo 2009-03-14
  • 打赏
  • 举报
回复
结果为:
B1
B1
A2
B2
A a = b;///这一句是
这样理解
B b=new B();
A a = b//A的对象a指向b实例调用的时候就是B的方法
ctan 2009-03-14
  • 打赏
  • 举报
回复
学校里老师讲虚方法时, 都是照本宣科, 没有讲出虚方法的由来,
下面简单总结一下:

假设A是父类, B是子类,
如果使用时, 定义与实例时所用类相同, 即父类用父类实例化, 子类用子类实例化,
如A a = new A;
B b = new B;
虚方法是一点用处也没有,

只有当定义用父类, 实例化时用子类, 虚方法才有作用
即A a = new B;

(还有一种情况就是定义用子类, 实例化用父类,即B b = new A; 这是错误的, 平时根本不可能用)

这就是为什么楼主所举例子里, 一定要用A a = b;
不仅这个例子如此, 所有讲虚方法的例子里都是这样--定义用父类, 实例化用子类,

只有在这种情况下, 虚方法才有意义, 其它任何情况, 虚方法都用不上
ztenv 2009-03-14
  • 打赏
  • 举报
回复
A a = b;///这一句是我不懂的,为什么会这样? 请高手 大虾们解释一下 谢谢!!
派生类的对象赋值给基类的指针,可以用基类的指针调用派生类中override的函数;
Dobzhansky 2009-03-14
  • 打赏
  • 举报
回复
Main 只是一个默认的入口点而已

不写 Main 函数, 照样可以使用其他函数作为入口点;
你可以写多个 Main() 函数, 指定使用哪个作为入口点.

默认的, 假定的, 并不是必需的.
芮言 2009-03-14
  • 打赏
  • 举报
回复
A a = b
将对象B的实例赋给A对象的实例a,因为B从A继承而来,所以可以这样写。
Main是程序的入口,程序的执行从这里开始!
liucfy 2009-03-14
  • 打赏
  • 举报
回复
Main()方法是一个程序的入口点。没有入口点程序怎么启动??最简单的比喻就是一个生产产品的流水线,总会有一个开始的地方吧?
brookmill 2009-03-14
  • 打赏
  • 举报
回复
A a = b;
定义了一个变量a,它的类型是A,但是实际上在内存里保存的是一个B类型的对象b
因为B是从A继承来的,所以这样做是可以的。

对于编译时绑定的函数,会调用A里面定义的函数,因为对编译器来说它是A类型
对于运行时绑定的函数,会调用B里面定义的函数,因为实际上它是一个B对象

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧