【发布时间】:2014-11-03 16:57:45
【问题描述】:
C# 提供了以下signature characteristics 在函数重载时使用。
我们知道重载只考虑参数;它们的数量和类型,但多态性的目标是根据调用策略提供相同的名称但不同的用法。
如果我有一个类包含两个具有相同名称和签名的方法,而一个是静态的,另一个不是,C# 编译器会抛出错误; “类已经定义了一个名为'foo'的成员,具有相同的参数类型”。对这两种方法的调用将有所不同;一个带有对象名,一个带有类名的静态。因此,跟注策略没有歧义。那为什么会抛出错误呢?
class Example {
public void foo() { }
public static void foo() { }
}
class Program
{
static void Main(string[] args)
{
Example e = new Example();
e.foo();
}
}
【问题讨论】:
-
考虑你的
void Bar(){foo();}在你的Example类中是合法的。您将如何解决foo()方法调用? -
@hamlet-hakobyan
this.foo();/Example.foo(); -
@SepehrFarshid 我的代码中没有
this。不合法吗? -
这是合法的,我刚才说过,C# 有语法来实际支持它。
标签: c# polymorphism