【发布时间】:2015-04-20 05:20:47
【问题描述】:
我在 C# 中有以下代码:
static void Main(string[] args)
{
Object rect = new Rectangle();
Object circle = new Circle();
Console.WriteLine(count(rect, circle));
}
public static int count(Object obj1, Object obj2)
{
return 4;
}
public static int count(Rectangle rect, Circle circ)
{
return 0;
}
程序输出 4,但是,我希望它选择更适合这种情况的方法,这将是第二种方法。我不能简单地将变量 rect 和 circle 定义为它们的特定类型,因为在我的代码上下文中,我不知道它们的类型是什么。
我尝试实现这一点的方式是否完全错误,或者是否有一种相当简单的方法可以自动选择正确的方法?
【问题讨论】:
-
可悲的是编译器选择了正确的方法,编译器看到的是Object和Object,而不是Rectangle和Circle
-
是的,但是由于 Rectangle 和 Circle 是更适合第二种方法的参数的子类,编译器应该选择第二种方法吗?
-
您在这里处理的概念是动态分派或多分派,这类似于方法重载,但在运行时而不是在编译时选择方法。这里是a related question
-
@DanDoe 不,C# 编译器不执行您的程序,因此它看不到
rect和circle中可能存在的值。它只能看rect和circle的类型,因为它们是“确定”的东西
标签: c# methods overloading