wordpress制作的网站模板,视频直播网站建设费用,长宁广州网站建设,大连市建设工程电子文件编辑软件C# 中的 where 关键字主要用在泛型约束#xff08;Generic Constraints#xff09;中#xff0c;目的是对泛型类型参数限制其必须满足的条件#xff0c;从而保证类型参数具备特定的能力或特性#xff0c;增强类型安全和代码可读性。
约束写法说明适用场景举例C#版本要求w…C# 中的 where 关键字主要用在泛型约束Generic Constraints中目的是对泛型类型参数限制其必须满足的条件从而保证类型参数具备特定的能力或特性增强类型安全和代码可读性。
约束写法说明适用场景举例C#版本要求where T : class类型参数必须是引用类型类、接口、数组等需要引用类型对象所有版本where T : struct类型参数必须是非空值类型结构体不能是Nullable需要值类型且非可空所有版本where T : new()类型参数必须有公共无参构造函数需要用 new T() 创建实例所有版本where T : BaseClass类型参数必须继承自指定基类需要基类的成员或行为所有版本where T : IInterface类型参数必须实现指定接口需要接口定义的行为所有版本where T : unmanaged类型参数必须是不含引用类型字段的非托管类型需要直接内存操作、指针操作C# 7.3 及以后where T : System.Enum类型参数必须是枚举类型泛型操作枚举时C# 7.3 及以后where T : System.Delegate类型参数必须是委托类型泛型委托相关操作C# 7.3 及以后 约束顺序规则 基类约束必须放在最前面如果有 如果存在继承类的约束如 where T : BaseClass它必须写在所有接口约束之前。 接口约束写在基类约束后面 可以有多个接口约束写在基类约束之后接口之间用逗号分隔。 new() 构造函数约束必须写在最后 表示类型参数必须有无参构造函数必须放在所有其他约束的最后。 class 和 struct 只能有一个且不能和彼此同时使用 where T : class 表示引用类型约束where T : struct 表示值类型约束 两者互斥。 class和BaseClass约束不能同时出现 unmanaged 和其他值类型约束的结合 unmanaged 约束比 struct 更严格也只可单独使用。 约束类型书写顺序基类约束、class约束、struct约束最前面接口约束紧随基类约束后面构造函数约束 (new())必须最后class 或 struct与其他约束互斥不可同时使用 Struct约束 struct 约束的限制和组合规则 struct 约束不能与 class 约束同时出现引用类型和值类型互斥。 struct 约束不能与基类约束一起使用因为基类必须是引用类型。 struct 约束不能与接口约束一起使用在早期C#版本中但从C# 7.3 起允许和接口约束一起使用即可以写 where T : struct, IComparable struct 约束后面可以跟接口约束C# 7.3及以后版本。 struct 约束后面也可以跟构造函数约束 new()不过对 struct 类型参数来说编译器自动隐含有无参构造函数new() 约束通常不必写。
合法示例
public class ExampleT where T : struct, IComparable, new()
{
}