我不确定如何解释这一点,所以我将展示我的示例并详细说明。
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
is的类型Foo
,但它也可以是Bar
,因为它继承自Foo
.
我的问题是:
为什么编译器看不到 的实际类型_foo
?
为什么print(Foo)
总是执行,即使类型是派生类Foo
?
已编辑
编辑了我的示例代码,因为它仍然包含我的大部分原始代码。
感谢安东尼佩格拉姆的例子。