`
luckyjaky
  • 浏览: 114411 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

泛型类型参数的约束

 
阅读更多
class MyClass<T1,T2,T3> 
                where T2:Custom
                where T3:IComparable

 如上:泛型类有三个类型参数,T1是未绑定的,只有Custom类型或从Custom类型继承的类型的类才能使用T2的实参,而对于T3,只有实现IComparable接口的类才能用于类型实参。

 

共有5中约束类型:

  1. 类名:只有这个类型的类或从它继承的类才能用作实例参数。
  2. class:任何引用类型,包括类、数组、委托和接口都可以用作实参。
  3. struct:任何值类型都可以被用作类型实参。
  4. Interface:只有这个接口或者实现这个接口的类型才可以被用作类型实参。
  5. new():任何带有无参公共构造函数的类型都可以用作实参。这叫做构造函数约束。

 

  • 以上5种约束,最多只能有一个主约束(类名、class、struct只能存在一个),如果有则必须放在第一位。
  • 可以存在任意多的接口约束。
  • 如果存在构造函数约束,则必须放在最后。

 

分享到:
评论

相关推荐

    c# 泛型类型参数与约束的深入分析

    代码如下:private void PromptName(T t) {}private void PromptName(Tuser user){}泛型类型参数约束在定义泛型类时,可以对在实例化泛型类时用于类型参数的类型种类施加限制。如果实例化泛型类时使用某个约束所不...

    详解C#泛型的类型参数约束

    C# 泛型类型参数约束详解 C# 泛型类型参数约束是指在定义泛型类、接口、委托或方法时,限制类型参数的类型或行为,以确保编译器能够正确地检查和执行泛型代码。约束可以指定类型参数必须满足的条件,如值类型、引用...

    .NETC#汇总 -集合、异常、泛型.rar

    5. 泛型类型参数约束:类型参数必须是另一个类型参数的子类型。 例如,如果我们有一个泛型方法,希望传入的类型参数能够调用某个特定的方法,可以添加where关键字指定方法约束。这样,只有实现了该方法的类型才能...

    where泛型约束的使用

    为了确保泛型类型参数的正确性和适用性,C#提供了所谓的“泛型约束”机制。通过使用`where`关键字,可以在泛型声明中对类型参数添加限制条件,从而更好地控制代码的行为。 #### 1. 基础概念 在C#中,`where`关键字...

    Delphi 泛型 接口约束的实例

    在实例文件中,你可能还会看到如何在实际代码中使用这个泛型类,例如创建实例并调用它的方法,以及验证泛型类型参数是否正确地实现了接口。此外,由于提供了编译后的执行文件,你可以直接运行程序来观察其效果,...

    C# where泛型约束测试代码

    在C#编程语言中,`where`关键字是用于泛型约束的重要组成部分,它允许我们对泛型类型参数施加特定的限制,确保在使用泛型类、接口或方法时,传递的类型必须满足这些约束条件。`where`泛型约束在提高代码的灵活性和...

    JAVA泛型笔记.pdf

    3. 边界:边界是指泛型类型参数的约束,例如 `&lt;T extends Number&gt;`。 泛型的使用场景 1. 集合类:Java 的集合类,如 ArrayList、LinkedList 等,都是使用泛型实现的。 2. 工具类:许多工具类,如 Arrays、...

    Java泛型类型擦除后的补偿

    - 反射API在泛型类型擦除后仍然能获取到泛型信息,这主要通过泛型类的类型参数的实际类型参数化实例(TypeToken)来实现。 - 这使得在运行时可以进行一些泛型相关的操作,如创建参数化的类实例。 总结来说,Java...

    java 泛型类的类型识别示例

    3. **泛型方法和类型参数**:在泛型方法中,我们可以用类型参数来表示操作的类型,然后在方法内部使用`Class`对象来获取更多信息。例如: ```java public &lt;U&gt; void process(U value) { Class&lt;U&gt; valueType = ...

    C#泛型研究

    约束是对泛型类型参数施加的限制条件,确保泛型类型或方法的正确使用。常见的约束包括`where T : class`、`where T : struct`、`where T : new()`等,它们分别表示`T`必须是引用类型、值类型或必须有无参构造函数。 ...

    C#泛型C#泛型C#泛型

    类型参数的作用域包括基类、类型参数约束语句和类体。在其作用域之内,类型参数可以被用作一个类型。 6. 类型参数的限制 类型参数不能用于直接声明一个基类型或者接口。类型参数不能用于成员访问、静态成员或者...

    泛型教程2.0

    这些约束允许开发者指定泛型类型参数必须满足的条件,比如必须是引用类型、值类型或实现特定接口等。通过泛型约束,可以确保泛型代码在编译时就检查类型兼容性,避免运行时错误。 #### 泛型IL代码与元数据 C#的...

    .NET/C#如何判断某个类是否是泛型类型或泛型接口的子类型详解

    3. **类型约束**:C#的泛型支持对类型参数进行约束,如基类约束、接口约束、构造函数约束以及值类型/引用类型约束,提高了类型安全,但牺牲了一定的灵活性。 然而,当我们需要判断一个类是否是泛型类型或泛型接口的...

    泛型需要注意的问题.pdf

    泛型类中的静态方法和静态变量不可以使用泛型类所声明的泛型类型参数。这是因为静态方法和静态变量是属于类的,而泛型类型参数是与实例相关的。但是,可以在泛型类中定义泛型静态方法,这种情况下方法内部使用的泛型...

    C#泛型学习和理解代码示例

    泛型类型参数可以有约束,限制它可以接受的类型。常见的约束包括: - `where T : class`:确保`T`是一个引用类型。 - `where T : struct`:确保`T`是一个值类型。 - `where T : new()`:要求`T`有一个公共无参数...

    C# 泛型深入理解介绍

    未绑定的泛型类型,如`Dictionary&lt;,&gt;`,没有指定具体类型参数,而已构造的泛型类型,如`Dictionary, int&gt;`,则明确指定了类型参数。已构造的泛型类型可以进一步分为开放类型和封闭类型。开放类型含有未指定的类型...

    C#7.0 NutShell_pdf档.rar

    - **递归泛型(Recursive Generic Constraints)**:允许泛型类型参数约束自身为泛型接口的实现。 2. **基础语法** - **变量与数据类型**:包括值类型、引用类型、字符串、数组、枚举等。 - **控制流**:条件...

    C#泛型约束的深入理解

    基类约束:指出某个类型必须将指定的类作为基类(或者就是该类本身),才能用作该泛型类型的类型参数。这样的约束一经使用,就必须出现在该类型参数的所有其他约束之前。 代码如下:class MyClassy&lt;T&gt;where T : class...

Global site tag (gtag.js) - Google Analytics