c#继承&链接问题

时间:2010-06-29 16:56:20

标签: c# inheritance chaining

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

public class Child : Parent
{
}

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

4 个答案:

答案 0 :(得分:6)

me方法返回对实际对象的引用,该对象的类型为Child,但引用的类型为Parent类型。

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

Child c = (Child)someObject.me();

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

答案 1 :(得分:1)

既然你没说过仿制品......

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

public class Child : Parent
{
    new public Child me ()
    {
        return this;
    }
}

另外,正如Darin所说,它是关闭的编译时类型,而不是返回的实际对象(实例)。

答案 2 :(得分:1)

不,(new Child()).me()会返回Child个对象,但表达式类型 Parent

答案 3 :(得分:0)

不,new Child().me()正在返回Child的实例:

Console.WriteLine(new Child().me()); // prints Child

为了编译时的安全,你需要泛型。

相关问题