“SomeClass where T : SomeOtherClass”和“SomeClass”之间有区别吗?

分享于2022年09月08日 .net c# generics 问答
【问题标题】:Is there a difference between "SomeClass where T : SomeOtherClass" and "SomeClass()"?“SomeClass where T : SomeOtherClass”和“SomeClass()”之间有区别吗?
【发布时间】:2022-08-02 01:01:00
【问题描述】:

我正在学习 C# 和 .net,并遇到了“where”的这种用法:

public class DbContextOptions : DbContextOptions where TContext : DbContext

为什么不简单的说

public class DbContextOptions : DbContextOptions

它们不相等吗?或者我完全错过了这方面的某些方面?

问候,

    <1234563>
    第二个不是强制泛型类型为 DbContext ,它只是在该类中创建一个新的泛型类型,称为 DbContext

【解决方案1】:

不,他们在做不同的事情。第二个没有做你认为的那样,并强制泛型类型为 DbContext 。相反,它只是 命名 该类中的泛型类型为 DbContext 。无论你叫它 TContext DbContext 还是 Bob ,它都没有任何区别,因为名称只在类中使用。但是使用 DbContext 会与“真实的” DbContext 类型发生冲突。所以你仍然需要泛型类型约束。

【讨论】:

    <1234563>
    谢谢,现在它点击了:)