C# 这个代码有什么用?
我想不出它的用途。这种模式有什么用 [此处为子孙后代重复代码]C# 这个代码有什么用?,c#,.net,oop,interface,C#,.net,Oop,Interface,我想不出它的用途。这种模式有什么用 [此处为子孙后代重复代码] public class Turtle<T> where T : Turtle<T> { } 公共类海龟,其中T:Turtle { } 我看不出有什么用。基本上,这和 public class Turtle { } 该模式本质上允许您引用父类中的具体子类。 例如: public abstract class Turtle<T> where T : Turtle<T> { p
public class Turtle<T> where T : Turtle<T>
{
}
公共类海龟,其中T:Turtle
{
}
我看不出有什么用。基本上,这和
public class Turtle
{
}
该模式本质上允许您引用父类中的具体子类。 例如:
public abstract class Turtle<T> where T : Turtle<T>
{
public abstract T Procreate();
}
public class SeaTurtle : Turtle<SeaTurtle>
{
public override SeaTurtle Procreate()
{
// ...
}
}
在前者中,它规定了一只
海龟的宝宝将是一只海龟
它的海龟一路下来……哇!?我必须错过一些东西…如果你问我的话,需要更多的海龟。这不一样,因为在给定的代码中,Turtle
无法实例化。是的,它可以。。。请看Marc Gravell在这里@Levesque的评论,以及RCIX在下面的评论。我的问题是它在哪里有任何用处?我刚刚想到了一些事情。您可以将Turtle
子类化并实例化它,但不能实例化Turtle
本身的副本。您认为,如果支持反向变化,这种事情就不需要了吗?它有更多的用途。它可以实现子类的接口。与Java类似,Java.lang.Enum
使用模式为子类实现Java.lang.Compariable
。我相信C#也有类似的用法。当然还有其他用法,但它们都涉及需要使用其子类类型的父类。关于接口的实现,您有两个选择:为T或Turtle实现接口。IComparable只允许您比较同一子类的项,而IComparable则允许您比较任何海龟。由于.NET4.0的IComparable在T中是逆变的,所以您可以将IComparable用作IComparable,因为T:Turtle。
public abstract class Turtle
{
public abstract Turtle Procreate();
}
public class SnappingTurtle : Turtle
{
public override Turtle Procreate()
{
// ...
}
}