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

1.C# 中泛型在 Class 上的实现

泛型是什么意思呢,就是说我们在编程的时候,需要一个数据类型,刚开的时候不知道数据类型是什么样子。或者多个类型相同的操作,不想重复的写代码,就需要一个泛型来表示一个同样的操作来表示不同的类型。类型安全,性能比较好。

 1  class Program
 2     {
 3
 4         static void Main(string[] args)
 5         {
 6             //规定一个泛型是整型,这么一个数组
 7             MyGenericArray<int> intArray = new MyGenericArray<int>(5);
 8             //给每一位赋值
 9             for (int c = 0; c < 5; c++)
10             {
11                 intArray.SetItem(c, c * 5);
12             }
13             //输出出来
14             for (int c = 0; c < 5; c++)
15             {
16                 Console.WriteLine(intArray.GetITem(c) + "");
17             }
18             Console.WriteLine();
19
20             MyGenericArray<char> charArray = new MyGenericArray<char>(5);
21
22             //给每一位赋值
23             for (int c = 0; c < 5; c++)
24             {
25                 charArray.SetItem(c, (char)(c+97));
26             }
27             //输出出来
28             for (int c = 0; c < 5; c++)
29             {
30                 Console.WriteLine(charArray.GetITem(c) + "");
31             }
32
33             Console.ReadLine();
34         }
35     }
36     public class MyGenericArray<T>//用<T>来表示我用到了一个泛型
37     {
38         private T[] array;//一个成员变量,数组
39         /// <summary>
40         /// 构造函数
41         /// </summary>
42         /// <param name="size">传进来一个整型,第一个传进来的数组进行一个初始化</param>
43         public MyGenericArray(int size)
44         {
45             array = new T[size + 1];
46         }
47
48         //创建两个方法,来获取数组的内容
49         public T GetITem(int index)
50         {
51             return array[index];
52         }
53         public void SetItem(int index, T value)
54         {
55             array[index] = value;
56         }
57     }

2.C# 泛型类的进一步探讨:泛型类的多个泛型的实现,泛型参数的限制,以及泛型类的继承。

1 public class MyGenericArray<T,k>//用<T>和 K 来表示我用到了一个泛型,可以传送多个泛型的类型 {  }

1 public class MyGenericArray<T,k> where T: struct//泛型参数的限制:这样的话就只能是c#值类型 还可以 Class interface instance Calss{}

1     public class SubCalss: MyGenericArray<int> { } //只能继承泛型的int类
2     public class SubCalss2<T> : MyGenericArray<T> where T : struct { } //继承同样是继续是泛型的

3.C# 泛型在 方法Method 上的实现

 1 class Program
 2     {
 3
 4         static void Main(string[] args)
 5         {
 6
 7             MyGenericArray<int> intArray = new MyGenericArray<int>(5);
 8             //  方法数据类型的调用,在已有的泛型class上 执行的泛型方法
 9             intArray.GenericMethod<string>("Heelo Generic!");
10             intArray.GenericMethod<int>(100);
11
12             //在没有泛型的class上 执行的泛型方法
13             int a, b;
14             char c, d;
15             a = 10;
16             b = 20;
17             c = ‘I‘;
18             d = ‘V‘;
19             Console.WriteLine("a:{0},b:{1}", a, b);
20             Console.WriteLine("c:{0},d:{1}", c, d);
21             Swap<int>(ref a, ref b);
22             Swap<char>(ref c, ref d);
23             Console.WriteLine("a:{0},b:{1}", a, b);
24             Console.WriteLine("c:{0},d:{1}", c, d);
25             Console.ReadLine();
26         }
27
28         //泛型在方法上的实现同样可以是一个静态方法,ref 关键字 引用
29         private static void Swap<T>(ref T lhs, ref T rhs)
30         {
31             //交换两个变量的数值
32             T temp;
33             temp = lhs;
34             lhs = rhs;
35             rhs = temp;
36
37         }
38     }
39
40     public class MyGenericArray<T> where T : struct//泛型参数的限制:这样的话就只能是c#值类型 还可以 Class  interface instance Calss
41     {
42         private T[] array;//一个成员变量,数组
43         /// <summary>
44         /// 构造函数
45         /// </summary>
46         /// <param name="size">传进来一个整型,第一个传进来的数组进行一个初始化</param>
47         public MyGenericArray(int size)
48         {
49             array = new T[size + 1];
50         }
51
52         //创建两个方法,来获取数组的内容
53         public T GetITem(int index)
54         {
55             return array[index];
56         }
57         public void SetItem(int index, T value)
58         {
59             array[index] = value;
60         }
61
62         //如果我们要用到一个泛型方法跟这边的T不一定同一个数据类型的做法
63         public void GenericMethod<X>(X x)
64         {
65             Console.WriteLine(x.ToString());
66         }
67     }

4.C# 泛型在委托 Delegate 上的实现

 1  class Program
 2     {
 3         //实现个委托,里面是泛型的,所有用到数据类型的都可以用到一个T,返回的也是T
 4         delegate T NumberChanger<T>(T n);
 5         //
 6         static int num = 10;
 7
 8         //实现了一个加数值的一个功能
 9         public static int AddNum(int p)//还是一个静态的 因为静态的可以直接被Main 函数调用
10         {
11             num += p;
12             return num;
13         }
14
15         //实现了一个乘数值的一个功能
16         public static int NultNum(int p)//还是一个静态的 因为静态的可以直接被Main 函数调用
17         {
18             num *= p;
19             return num;
20
21         }
22         static void Main(string[] args)
23         {
24             NumberChanger<int> nc1 = new NumberChanger<int>(AddNum);
25             NumberChanger<int> nc2 = new NumberChanger<int>(NultNum);
26             nc1(25);
27             Console.WriteLine(num);
28             nc2(5);
29             Console.WriteLine(num);
30             Console.ReadLine();
31         }
32
33
34     }
时间: 2024-10-13 16:04:13

C#语言进阶——6.C# 的泛型的相关文章

苹果新的编程语言 Swift 语言进阶(十四)--扩展

Swift语言的扩展是为一个已经存在的类.结构.枚举类型添加新功能的一种方式,包括为不能存取源代码的那些已经存在的类型添加功能.        扩展类似于Objective-C语言中的类别,与类别不同的是Swift语言的扩展没有名字.        扩展能够为已存在类型:     1)增加计算属性和计算静态属性:     2)定义新的实例方法和类型方法:     3)提... 请转移到此位置继续阅读,谢谢! 苹果新的编程语言 Swift 语言进阶(十四)--扩展 苹果新的编程语言 Swift 语

苹果新的编程语言 Swift 语言进阶(八)--属性

请转移到此位置阅读,谢谢! 苹果新的编程语言 Swift 语言进阶(八)--属性 http://blog.csdn.net/goohong/article/details/32096289 苹果新的编程语言 Swift 语言进阶(八)--属性,布布扣,bubuko.com

苹果新的编程语言 Swift 语言进阶(十五)--协议

协议定义了适合某个特定任务或功能需要的方法.属性和其它需求的一个蓝图.协议本身不提供这些需求的实现,它只是描述了一个任务或功能实现的蓝图.       协议与java 语言中的接口定义类似,都是描述了一个实现可以干什么,而本身却不包含任何实现.与接口不同的是swift语言定义的协议可以被一个类.结构.或者枚举采用,来提供协议规定需求的实际实现,而java 语言的接口只能被类实现.   ... 请麻烦转移到此位置阅读,谢谢! 苹果新的编程语言 Swift 语言进阶(十五)--协议 苹果新的编程语言

苹果新的编程语言 Swift 语言进阶(十一)--实例的初始化与类的析构

一 .实例的初始化          实例的初始化是准备一个类.结构或枚举的实例以便使用的过程.初始化包括设置一个实例的每一个存储属性为一个初始值,以及执行任何其它新的实例能够使用之前需要的设置或初始化. 一个类.结构或枚举能定义一个初始化方法来设置它的特性,用来确保它的实例的所有属性都有有效的初始值. 通过调用类.结构或枚举提供的初始化方法来执行实例的初始化过程. 类的实例也能实现一个析构,用来在类的实例释放之前执行任何特定的清除过程来释放分配的专有资源. 1 . 初始化方法的定义 初始化方法

苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类

一. 枚举 枚举定义了一种包含一组相关值的公共类型.枚举是Swift中的一种与类类似的类型,具有许多传统类才有的特征,例如计算属性.实例方法,能够通过扩展或协议增强功能等. 1.1 枚举定义 Swift 语言的枚举类型的定义语法如下: enum CompassPoint { case North case South case East case West } 枚举语法以一个关键字enum来标识,enum后面包含一个枚举类型名字,枚举定义全部放到一对大括号中. 在枚举中定义的值称为枚举成员值,用

苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算

一 基本操作运算 1. 赋值操作 在Swift 中,可以使用赋值操作为一个常量或一个变量赋值,也可以使用多元组一次为多个常量或变量赋值. Swift 的赋值操作与其它语言最大的不同是赋值操作除了能够为变量或常量赋值外本身不能够返回值. 这个特征可以避免某些条件下赋值操作错误地用于相等比较操作. 如在C语言中,if (x = =y) 很容易误写作if (x = y) ,虽然逻辑结果不正确,但C语言的编译器却无法检查出这种情况,而Swift 语言却可以有效避免这种情况发生,因为 在Swift 中if

苹果新的编程语言 Swift 语言进阶(一)--综述

Swift 是苹果开发和提供的供开发IOS 和OS X应用的一门新的语言.Swift语言基于C 和Objective-C语言,除了提供C 和Objective-C语言具有的所有语法功能外,为了编程方便和高效,Swift在语法上作了大量的优化和改进. Swift采用安全编程模式,具有许多先进的强大的功能 ,如动态运行时.编译动态进行类型检查.Closures.下标功能.自动引用计数.选项类型.通用类型和类型编译时推断.类型的扩展和嵌套.协议类型.功能和类型的通用化.操作符的定制和添加. Swift

苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型

一.字符串( String  )和字符类型(Character) 字符串是一种字符的带次序的收集类型(相当于数组),字符是字符串中的元素. 在Swift 语言中,字符串是编码独立的Unicode字符的组合,并提供相应方法来获取以各种Unicode呈现方式包含的字符. 1. 字符串定义和初始化 Swift 语言使用var或let关键字来定义一个常量字符串(不可修改)或变量字符串(可以修改).  而不是像Object C语言一样定义两种不同的类型. Swift 语言允许使用一个双引号的字符串来初始化

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

泛化允许你定义一个宽松.可重用的函数或者类型,使用泛化能够避免代码的重复,也能以更清楚和抽象的方式来表达程序的意图. 泛化是Swift语言提供的强大功能之一,Swift提供的许多标准库都使用了泛化来创建,如Swift提供的数组和词典类型.通过使用泛化,你能使用一个数组和词典来包含和存储任何类型的元素. 1.1 泛化函数 使用Swift语言你能定义一个可以工作于任意类型的泛化函数,从而不必为每种类型都定义一个具有相同功能的函数,这样就可以大大减少代码的重复. 如对一个实现任意类型值交换(swap)