public class Parent
{
public virtual Parent me()
{
return this;
}
}
public class Child : Parent
{
}
new Child()。me()返回一个Parent对象。我需要让它返回Child对象本身(不使用扩展和泛型)??
答案 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
为了编译时的安全,你需要泛型。