c#继承和链接问题

ale*_*lex 1 c# inheritance chaining

public class Parent
{
    public virtual Parent me()
    {
        return this;
    }
}

public class Child : Parent
{
}
Run Code Online (Sandbox Code Playgroud)

new Child().me()返回一个Parent对象.我需要让它返回Child对象本身(不使用扩展和泛型)?

Guf*_*ffa 6

me方法返回对实际对象的引用,该引用属于该类型Child,但引用的类型属于该类型Parent.

所以,你所拥有的是Parent指向该类型对象的类型的引用Child.您可以使用它来访问Child该类从该类继承的任何成员Parent.要访问Child类的成员,您必须将引用转换为类型Child:

Child c = (Child)someObject.me();
Run Code Online (Sandbox Code Playgroud)

你可以让me方法返回一个Child引用并在方法内部进行转换,但是它当然不能返回Parent对象的引用.如果不使用泛型,则每个方法只能有一种返回类型.即使您重写Child类中的方法,它仍然必须返回与类中相同的数据类型Parent.