回 帖 发 新 帖 刷新版面

主题:请教一个C#继承中的问题??谢谢!

(1)基类Point中有Private x,y;属性X,Y;Public方法ToString(覆盖基类Object中的ToString). 派生类Circle继承了Point类,另有Private radius;属性Radius;Public方法Diameter();Circumstance();虚方法Area();以及覆盖的ToString()方法。 
(2)现在Main()函数中,Circle cirle; 其中有一行代码很奇怪:
string output += "\n\n" + cirle + "\n";  //****

我的问题是,在这种情况下执行的结果和string output += "\n\n" + cirle.ToString() + "\n";一样。 编译器是怎么看上述//***语句的,单一个cirle怎么能判断其调用哪个方法呢??请各位指教!谢谢!

回复列表 (共3个回复)

沙发

书上说是隐式调用方法:ToString();但我不知道编译器是怎么知道要隐式调用这个方法而不是其他方法。请各位前辈赐教!

板凳

如果继承类中有重写夫类的方法,则只调用派生类的方法。个人理解。。

3 楼

您这个说法没错,派生类覆盖了基类的方法(override)是,派生类的对象调用的一般是派生类自己的方法,除非使用了前缀base.才使用基类的方法。但这里的问题在于在没有指定哪个方法的情况下,仅使用的对象名就可以让编译器知道选用多种方法中的一种,也就是书上说的隐式调用。这个所谓的“隐式调用”是怎么实现的?谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册