可能重复:
不可能的递归泛型类定义?
我刚刚发现
public class Foo<T> where T : Foo<T>
{
}
是合法的。它到底是什么意思?它似乎是递归的,是否可以实例化这样的东西?
可能重复:
不可能的递归泛型类定义?
我刚刚发现
public class Foo<T> where T : Foo<T>
{
}
是合法的。它到底是什么意思?它似乎是递归的,是否可以实例化这样的东西?
我不会说这是没用的。让我们观察下面的示例如何支持流畅的语法。在某些情况下,您正在父级base
中创建一些实现并希望提供流畅的声明......您可以通过这种方式使用此约束
public class Parent<TChild>
where TChild : Parent<TChild>
{
public string Code { get; protected set; }
public TChild SetCode(string code)
{
Code = code;
return this as TChild; // here we go, we profit from a constraint
}
}
public class Child : Parent<Child>
{
public string Name { get; protected set; }
public Child SetName(string name)
{
Name = name;
return this // is Child;
}
}
[TestClass]
public class TestFluent
{
[TestMethod]
public void SetProperties()
{
var child = new Child();
child
.SetCode("myCode") // now still Child is returned
.SetName("myName");
Assert.IsTrue(child.Code.Equals("myCode"));
Assert.IsTrue(child.Name.Equals("myName"));
}
}
请举个例子,说明如何使用此约束