我不知道我怎麼能解釋這個,所以我只是展示我的例子和詳細說明。c#沒有根據參數類型(繼承)選擇我想要的函數
using System;
namespace Demo
{
static class Program
{
static void Main()
{
var test = new ExampleClass(new Bar());
Console.WriteLine(test);
}
}
class ExampleClass {
public Foo _foo;
public ExampleClass(Bar bar)
{
_foo = bar;
}
public override String ToString() {
return print(_foo);
}
String print(Bar bar) {
return bar.Name;
}
String print(Foo foo) {
return foo.ToString();
}
}
class Bar : Foo
{
public String Name;
}
class Foo
{ }
}
好吧,這是行不通的。
雖然我可以看到_foo
的類型是Foo
在聲明中,它也可以是Bar
,因爲它繼承了Foo
。
我的問題是:
爲什麼不編譯器看到的實際類型的_foo
?
爲什麼print(Foo)
總是執行,儘管該類型是Foo
的派生類?
編輯
編輯我的示例代碼,因爲它仍然含有得多的我原來的代碼。
感謝Anthony Pegram的例子。
爲什麼不知道?簡單地說,因爲這在運行時很難理解,並且會顯着降低性能。 – antonijn 2013-04-05 15:46:19
請顯示SyntaxNode的定義。 – driis 2013-04-05 15:46:30
由於@driis指出,你沒有定義'SyntaxNode',它可能是任何東西,並給一個變量與關鍵字相同的名稱,如'base',這是一個壞主意。 – Jodrell 2013-04-05 16:08:32