时间:2019-03-17 标签:c#inheritance&连锁问题

发布于 2024-09-07 08:11:07 字数 213 浏览 6 评论 0原文

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

public class Child : Parent
{
}

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

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

public class Child : Parent
{
}

new Child().me() is returning a Parent object. What do i need to have it return the Child object itself (without using extension and generic)??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

遇到 2024-09-14 08:11:07

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

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

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

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

The me method is returning a reference to the actual object, which is of the type Child, but the type of the reference is of the type Parent.

So, what you have is a reference of the type Parent that points to an object of the type Child. You can use that to access any members that the Child class inherits from the Parent class. To access the members of the Child class you have to cast the reference to the type Child:

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

You could make the me method return a Child reference and do the casting inside the method, but then it will of course not work to return a reference to a Parent object. If you don't use generics, each method can only have one return type. Even if you override the method in the Child class, it still has to return the same data type as in the Parent class.

欢你一世 2024-09-14 08:11:07

既然你说没有泛型......

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

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

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

Since you said no generics...

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

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

Also, as Darin said, it is the compile-time type that is off, not the actual object (instance) being returned.

萌能量女王 2024-09-14 08:11:07

否,(new Child()).me() 返回一个 Child 对象,但表达式具有类型 父级

No, (new Child()).me() returns a Child object, but the expression has type Parent.

无远思近则忧 2024-09-14 08:11:07

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

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

为了编译时安全,您将需要泛型。

No, new Child().me() is returning an instance of Child:

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

For compile-time safety you will need generics.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文