奇怪的C#通用约束

bra*_*ing 7 c# generics recursion

可能重复:
不可能的递归泛型类定义?

我刚刚发现了

public class Foo<T> where T : Foo<T>
{

}
Run Code Online (Sandbox Code Playgroud)

是合法的.究竟是什么意思?它似乎是递归的,是否有可能实例化这样的东西?

Rad*_*ler 2

我不会说这是无用的。让我们观察下面的例子如何支持流畅的语法。如果您正在父级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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

请举个例子,说明如何使用此约束