7

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

我刚刚发现

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

}

是合法的。它到底是什么意思?它似乎是递归的,是否可以实例化这样的东西?

4

1 回答 1

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"));
    }
}

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

于 2012-11-20T09:33:21.217 回答