我有另一位程序员编写的代码,无法理解

public abstract class AppBase<T> : IApp where T : AppBase<T>, new()
{
    //
}

据我了解,类型AppBaseT类实现了IApp接口(interface),其中T实现了???

有人可以解释一下最后一部分吗?

最佳答案

在这种情况下,对T的约束意味着T必须实现AppBase<T>并具有默认构造函数。实际上,您需要将自己作为类型传递。

通常,这是尝试解决类型系统并通过typeof(T)提供对基类中实现类型的访问的尝试。例如,给定:

public interface IApp {}

public abstract class AppBase<T> : IApp where T : AppBase<T>, new()
{
    public void Print()
    {
        Console.WriteLine(typeof(T).ToString());
    }
}

public class AppBaseFoo : AppBase<AppBaseFoo>
{
}

然后,您可以编写如下代码:
var foo = new AppBaseFoo();
foo.Print();

它将打印AppBaseFoo的类型信息。但是,这并不是万无一失的-例如,将其“子类化”即可。新增:
public class AppBaseBar : AppBaseFoo {}

然后写:
var bar = new AppBaseFoo();
bar.Print();

使相同的AppBaseFoo信息被打印。

10-07 23:41