.NET Framework 中的泛型概述

news/2024/9/28 22:45:01 标签: .net, dictionary, function, class, string, 存储
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

 泛型是具有占位符类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型及其方法的参数类型出现,泛型方法可以将其参数用作其返回值的类型或者其某个形参的类型。下面的代码阐释一个简单的泛型类定义。

   Public Class Generic(of T)

       public Field As T

End  Class

在创建泛型类的实例时,会指定实际类型来替换类型参数。这会建立一个新的泛型类,称为构造泛型类,选定的类型将替换所有出现的类型参数。最后将得到按照您选择的类型定制的类型安全的类,如下面的代码所示。

dim g as New Generic(of String)

g.Field="A String"

泛型术语

“泛型类型定义”是用做模板的类、结构或接口声明,其中具有该类、结构或接口声明可以包含或使用的类型的占位符。例如,Dictionary<(Of <(TKey, TValue>)>) 类可以包含两种类型:键和值。因为它只是一个模板,您不能创建作为泛型类型定义的类、结构或接口的实例。

“泛型类型参数”或称“类型参数”是泛型类型或方法定义中的占位符。Dictionary<(Of <(TKey, TValue>)>) 泛型类型具有两个类型参数:TKey 和 TValue,分别表示其键和值的类型。

“构造泛型类型”或称“构造类型”是为泛型类型定义的泛型类型参数指定类型得到的结果。

“泛型类型参数”是替换泛型类型参数的任何类型。

 术语“泛型类型”一般包括构造类型和泛型类型定义。

“约束”是加在泛型类型参数上的限制。例如,可以将类型参数限制为实现 IComparer<(Of <(T>)>) 泛型接口的类型以确保可以对该类型的实例进行排序。还可以将类型参数限制为具有特定基类的类型、具有默认构造函数的类型或是引用类型或值类型。泛型类型的用户不能替换不满足这些约束的类型参数。

“泛型方法定义”是具有两个参数列表的方法:一个泛型类型参数列表和一个形参列表。类型参数可以作为返回类型或形参的类型出现,如下面的代码所示。

Function Generic(Of T)(ByVal arg As T) As T
    Dim temp As T = arg
    ...
End Function

泛型方法可以出现在泛型或非泛型类型上。需要注意的是,并不是只要方法属于泛型类型,或者甚至是方法的形参的类型是封闭类型的泛型参数,就可以说方法是泛型方法。只有当方法具有它自己的类型参数列表时,才能称其为泛型方法。在下面的代码中,只有方法 G 是泛型方法。

Class A
    Function G(Of T)(ByVal arg As T) As T
        ...
    End Function
End Class
Class Generic(Of T)
    Function M(ByVal arg As T) As T
        ...
    End Function
End Class


http://www.niftyadmin.cn/n/872433.html

相关文章

调试记录--spring mvc视图解析失败之@RestController的锅

新上手的项目中使用视图解析&#xff0c;自己写接口的时候&#xff0c;习惯了写RestController声明&#xff0c;一不小心就排查了半小时&#xff0c;找到 ServletInvocableHandlerMethod 中的invokeAndHandle方法&#xff0c;发现图中位置解析视图失败&#xff0c; 然后在selec…

连接数据库的小问题

今天用vb,net连接了一下数据库出了一些问题总是提示我sqlcommand”在命名空间“System.Data.SqlClient”中不明确&#xff0c;重新引用了好多次system.data.sqlclient 都不行&#xff0c;上网查了几次好多让你都遇到了这个问题&#xff0c;然而在百度中查不到明确的解决方法&am…

网页实现滚动

看到老焦制作的网页上的字可以实现滚动向他讨教了一番。另外从网上找了相关的一些资料和大家一起分享。 文字滚动是由<marquee></marquee>控制的。 marquee的参数如下&#xff1a;1、方向 <direction#> #left, right如&#xff1a;<marquee directionle…

老菜鸟的笔试记录-2021/03/06

笔试记录 参加某公司的招聘&#xff0c;三道笔试题&#xff0c;两个半小时&#xff0c;还在第一道题debug&#xff0c;真的太菜了。记录一下笔试题目&#xff0c;慢慢积累。 求一个环形字符串中包含两个 o 的最大子字符串长度&#xff0c;如 alolobo 中最大子字符串为alolob&…

开发问题解决---FTP线程池使用报错connection reset by peer, socket write error

背景 内部重构的一个项目中&#xff0c;同事通过apache的GenericObjectPool构建一个小型的线程池维护FTP服务器的连接&#xff0c;但是在实际使用中偶尔会出去报错&#xff0c;错误为&#xff1a;connection reset by peer, socket write error 分析 很明显&#xff0c;这是…

iBATIS也支持延迟加载

iBATIS也支持延迟加载&#xff0c;可以在sqlMapConfig.xml中配置lazyLoadingEnabled来设置&#xff0c;默认情况下为true&#xff0c;即默认开启延迟加载。 使用延迟加载时要求符合一定的规范&#xff0c;如果直接使用连接语句查询出所有对象的话就不能延迟加载了。 例如&#…

13 spring security和oauth2学习

Spring Security 简介 Spring Security是Spring Resource社区的一个安全组件&#xff0c;为系统提供安全的防护。Spring Security通过注解为每一层&#xff08;controller、service、dao&#xff09;都提供安全保护。 Spring Security的主要目标是认证和授权&#xff0c;认证…

14 JWT和Spring security Oauth2

JWT和SPRING SECURITY OAUTH2 JWT简介 JSON Web Token&#xff1a;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;定义了一种紧凑且自包含的标准&#xff0c;该标准旨在将各个主体的信息包装为JSON对象。主题信息是通过数字签名进行加密和验证的。常使用HMAC算…