【发布时间】:2011-10-11 00:18:21
【问题描述】:
考虑代码
public class Base
{
public virtual int Add(int a,int b)
{
return a+b;
}
}
public class Derived:Base
{
public override int Add(int a,int b)
{
return a+b;
}
public int Add(float a,float b)
{
return (Int32)(a + b);
}
}
如果我创建 Derived 类的实例并使用 int 类型的参数调用 Add 为什么它会使用 float 参数调用 Add 方法
Derived obj =new Derived()
obj.Add(3,5)
// why this is calling
Add(float a,float b)
为什么不调用更具体的方法?
【问题讨论】:
-
你怎么知道3和5是int?尝试指定它们的类型,看看会发生什么。
-
你能编译这个吗?您可能会遇到一些转换错误,例如 float to int?
-
这不会编译,因为没有从 float 到 int 的隐式转换。你确定第二个 Add 方法返回 int 吗?
-
@Ritch ,@Matthew ..即使你添加类似
int a =3;int b=5;obj.Add(a,b);的内容也没有任何区别@ -
另请阅读 John Skeet 的以下帖子。 http://csharpindepth.com/Articles/General/Overloading.aspx
标签: c# methods virtual overloading