泛型约束

Posted 【我是谁】

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泛型约束相关的知识,希望对你有一定的参考价值。

一、使用where关键字限制类型参数

泛型约束

描述

where T : struct

类型参数<T>的继承链中必须有System.ValueType

where T : class

类型参数<T>的继承链中不允许有System.ValueType(例如<T>是一个引用类型)

where T : new()

类型参数<T>必须有一个默认构造函数。如果同时有多个限制,这个限制必须放在最后。

where T : NameOfBaseClass

类型参数<T>必须继承至基类NameOfBaseClass

where T : NameOfInterface

类型参数<T>必须实现接口NameOfInterface

为了便于理解,下面通过几个例子来了解where的用法。虽然这都是太基础的东西,看到以前的笔记顺便copy过来了
//T必须具备一个默认构造函数
public class MyGenericClass<T> where T : new()
{...}
//T必须是一个具备默认构造函数的类,而且实现了IDrawable接口
public class MyGenericClass<T> where T : class, IDrawable, new()
{...}
//MyGenericClass继承至MyBase类,实现了ISomeInterface接口;             
//类型参数T的继承链中有System.ValueType
public class MyGenericClass<T> : MyBase, ISomeInterface where T : struct
{...}
//类型参数K必须具备默认构造函数;类型参数T必须实现泛型接口IComparable<T>
public class MyGenericClass<K, T> where K : new()
where T : IComparable<T>
{...}

 

以上是关于泛型约束的主要内容,如果未能解决你的问题,请参考以下文章

C# 泛型类型参数的约束

《C#零基础入门之百识百例》(八十二)泛型类型参数Where约束 -- 泛型单例

《C#零基础入门之百识百例》(八十二) 泛型类型参数Where约束 -- 泛型单例

请教一个unity有关于泛型参数的问题

泛型约束中的 F# 错误

泛型方法多 (OR) 类型约束