c# 进阶1-泛型

1-什么是泛型

对类型的延迟声明

 1 public class GenericMethod
 2     {
 3         /// <summary>
 4         /// 泛型方法
 5         /// </summary>
 6         /// <typeparam name="T"></typeparam>
 7         /// <param name="tValue"></param>
 8         public static void Show<T>(T tValue)
 9         {
10             Console.WriteLine(" Show<T>方法 展示{0},其类型为{1},其类型2为{2}", tValue, tValue.GetType(), typeof(T));
11         }
12
13
14         public static void ShowSome<T, M, S, SM, SD, t, s, w, CLASS>(T tValue, M mValue)
15         {
16             Console.WriteLine(" Show<T>方法 展示{0},其类型为{1},其类型2为{2}", tValue, tValue.GetType(), typeof(T));
17         }
18     }

延迟声明在一个<T>里T,T 是一个占位符,不一定非得T

2.写法

在类后面加上<T>

public class GenericMe<T>{...}

则在其内部的函数可以直接使用T,只需要在声明时加上:

GenericMethod<T是什么类型比如:string> a = new GenericMethod<T是什么类型比如:string>

泛型函数则是:

1      public void Show<T>(T tValue)
2         {
3             Console.WriteLine(" Show<T>方法 展示{0},其类型为{1},其类型2为{2}", tValue, tValue.GetType(), typeof(T));
4         }

使用:

eg: 当前类.Show<int>(5)或者
当前类.Show(5)//可以自己推断

3.约束:

接口约束:where T:Interface   必须显示的实现接口

基类约束:where T:BaseClass 参数必须为BaseClass或者派生类

类约束:where T:class T必须是引用类型

值类型约束: where T:struct T必须是值类型

构造函数约束: where T:new()  必须有默认的构造函数

泛型类型约束: Where T:T1

4.默认值:

T t=defalut(T); 如果T是值类型,则t=0;如果T是引用类型,则t=null.

     private static T Get<T>() where T : struct//值类型
        {            
      return default(T);
        }
     private static T Get<T>() where T : class
        {
            return default(T);
        }
时间: 2024-08-09 06:34:17

c# 进阶1-泛型的相关文章

C#进阶之泛型(Generic)

1.泛型 泛型是framwork2.0推出的新语法,具有延迟声明的特点:把参数类型的声明推迟到调用的时候.泛型不是一个语法糖,是框架升级提供的功能.需要编辑器和JIT(just-in-time compilation.即时编译)的支持. 泛型并不存在性能问题,因为编译器支持 ,在即时编译的时候,编译器会生成一个泛型方法的副本,基本上和固定类型的方法性能无差别. 泛型的用处就是 用一个类.方法.接口.委托来满足不同的具体类型,然后做一样的事情. 泛型的约束有以下几种类型: 基类约束 接口约束 引用

iOS 强大的泛型,同样也可以对UIButton进行扩展

文章围绕这五点: 1. 泛型是什么 2. 为什么要用泛型 3. 泛型怎么用 4. 泛型进阶 5. 泛型的延伸使用 泛型(Generics)是什么? 引用Apple中Generics的描述: Generic code enables you to write flexible, reusable functions and types that can work with any type, subject to requirements that you define. You can writ

【C#进阶系列】11 泛型

泛型是CLR和编程语言提供的一种特殊机制,它用于满足“算法重用”  . 可以想象一下一个只有操作的参数的数据类型不同的策略模式,完全可以用泛型来化为一个函数. 以下是它的优势: 类型安全 给泛型算法应用一个具体的数据类型时,如果不兼容这种类型,就会编译错误或者报异常. 更清晰的代码 减少了强制转换,让代码更简洁 更佳的性能 用泛型可以有效避免装箱拆箱的操作,且无需在进行强制转换时验证是否类型安全,这两点都有效提高了代码的性能. 这就是为什么List<T>淘汰了ArrayList的原因,特别是在

JAVA进阶-泛型

>泛型:泛型指代了參数的类型化类型,一般被用在接口.类.方法中 >作用:用来确定參数的范围,在书写代码的时候提前检查代码的错误性 >泛型的声明,下面给出类声明,依此类推: class ClassName<T>{} class ClassName<K,V,O>{} >通用符:<?>一般指定全部的类 >限定符:<T exteds 超类> 1)限定符字母仅仅能被限定一次 2)当extends的时候仅仅能使用大写字母,当super的时候

C#语言进阶——6.C# 的泛型

1.C# 中泛型在 Class 上的实现 泛型是什么意思呢,就是说我们在编程的时候,需要一个数据类型,刚开的时候不知道数据类型是什么样子.或者多个类型相同的操作,不想重复的写代码,就需要一个泛型来表示一个同样的操作来表示不同的类型.类型安全,性能比较好. 1 class Program 2 { 3 4 static void Main(string[] args) 5 { 6 //规定一个泛型是整型,这么一个数组 7 MyGenericArray<int> intArray = new MyG

Java进阶(四)Java反射TypeToken解决泛型运行时类型擦除的问题解决

在开发时,遇到了下面这条语句,不懂,然习之. private List<MyZhuiHaoDetailModel> listLottery = new ArrayList<MyZhuiHaoDetailModel>(); Gson gson=new Gson(); JSONObject object=new JSONObject(callbackValue); listLottery =  gson.fromJson(object.getString("lists&quo

Java进阶 四 Java反射TypeToken解决泛型运行时类型擦除问题

在开发时,遇到了下面这条语句,不懂,然习之. private List<MyZhuiHaoDetailModel> listLottery = new ArrayList<MyZhuiHaoDetailModel>(); Gson gson=new Gson(); JSONObject object=new JSONObject(callbackValue); listLottery =  gson.fromJson(object.getString("lists&quo

【C#进阶学习】泛型

一.泛型引入 需求:传入一个类型(整型/日期/字符串或其他),打印出它的类型和内容. 1.初级版 1 public class CommonMethod 2 { 3 /// <summary> 4 /// 打印int值 5 /// </summary> 6 /// <param name="iParameter"></param> 7 public static void ShowInt(int iParameter) 8 { 9 Con

苹果新的编程语言 Swift 语言进阶(十六)--泛型

? ? ? ? ??? ?泛型同意你定义一个宽松.可重用的函数或者类型.使用泛型能够避免代码的反复.也能以更清楚和抽象的方式来表达程序的意图. ? ? ? ? ? ?泛型是Swift语言提供的强大功能之中的一个,Swift提供的很多标准库都使用了泛型来创建,如Swift提供的数组和词典类型. 通过使用泛型,你能使用一个数组和词典来包括和存储不论什么类型的元素. ?? ? 1.1 泛型函数 ?? ? ? ? ? 使用Swift语言你能定义一个能够工作于随意类型的泛型函数.从而不必为每种类型都定义一

.NET进阶篇-语言章-1-Generic泛型深入

内容目录 一.概述二.泛型的好处三.泛型使用1.泛型方法2.泛型类.泛型接口四.泛型的功能1.泛型中的默认值2.约束3.协变逆变5.泛型委托4.泛型缓存五.总结 一.概述 泛型我们一定都用过,最常见的List<T>集合..NET2.0开始支持泛型,创建的目的就是为了不同类型创建相同的方法或类,也包括接口,委托的泛型.比如常见的ORM映射,一个方法通过传入不同的类,返回不同的类实例,再调用时才确定参数类型. 我们知道想要一个类相同名称的方法,如果仅参数类型不同,那么要重载.重载会有很多冗余的代码