我们真的需要具有类型约束的泛型类吗?

Dis*_*ted 1 c# generics

对不起,问题的标题有点模糊.
假设我们有以下代码

class ReportManager<T> where T : IPrint
{
    public void MakePaperCopy(T t)
    {
        //...
        t.Print();
        //...
    }
}

public interface IPrint
{
    void Print();
}
Run Code Online (Sandbox Code Playgroud)

它可以轻松地重新制作为非通用版本.像这样

class ReportManager
{
    public void MakePaperCopy(IPrint print)
    {
        //...
        print.Print();
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

第一种情况有一些优势吗?似乎没有.
我可以说每个带有单一的通用类where T: ISomeInterface都可以轻松地重新编译为非通用版本,应该这样做是因为它降低了代码的复杂性吗?

rom*_*aga 5

在所有情况下都没用.
如果您想要返回此内容T,那么您可能想知道确切的类型.
因为当您返回它时,您可以从派生类访问所有(可访问的)成员,而不仅仅是来自基类/接口的成员.

  • @ romain-aga:帖子确实声明了_single_` where ...`约束.所以与`new()`的组合是一个不同的情况. (2认同)