3.C#における汎用クラスのさらなる検討
14901 ワード
目次を読む
一:多重汎用classはTだけでなくKもあり、インスタンス化時に複数のデータ型を転送するタイプであり、C#集合タイプのDictionaryは多重汎用である
二:汎用型のデータ型パラメータは制限付きの汎用型のデータ型は制限付きで、Tは値タイプまたは参照タイプしか伝達できないことを規定し、ここでは第1のデータ型Tが値タイプであることを制限する.
三:継承における汎用的な処理
一:多重汎用classはTだけでなくKもあり、インスタンス化時に複数のデータ型を転送するタイプであり、C#集合タイプのDictionaryは多重汎用である
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace MultipleGeneric
8 {
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 MyGenericArray<int, char> intArray = new MyGenericArray<int, char>(5);
14 for (int i = 0; i < 5; i++)
15 {
16 intArray.SetItem(i, i * 5);
17 }
18 for (int i = 0; i < 5; i++)
19 {
20 Console.WriteLine(intArray.GetItem(i) + "");
21 }
22 MyGenericArray<char, string> charArray = new MyGenericArray<char, string>(5);
23
24 MyGenericArray<string, string> stringArray = new MyGenericArray<string, string>(5);
25 for (int i = 0; i < 5; i++)
26 {
27 charArray.SetItem(i, (char)(i + 97));
28 }
29 for (int i = 0; i < 5; i++)
30 {
31 Console.WriteLine(charArray.GetItem(i) + "");
32 }
33
34 Console.ReadLine();
35 }
36 }
37
38
39 class MyGenericArray<T,K>
40 {
41 private T[] array;
42
43 public MyGenericArray(int size)
44 {
45 array = new T[size + 1];
46 }
47
48 public T GetItem(int index)
49 {
50 return array[index];
51 }
52
53 public void SetItem(int index, T value)
54 {
55 array[index] = value;
56 }
57 }
二:汎用型のデータ型パラメータは制限付きの汎用型のデータ型は制限付きで、Tは値タイプまたは参照タイプしか伝達できないことを規定し、ここでは第1のデータ型Tが値タイプであることを制限する.
1 // class,interface, class
2 class MyGenericArray<T,K> where T:struct
3 {
4 private T[] array;
5
6 public MyGenericArray(int size)
7 {
8 array = new T[size + 1];
9 }
10
11 public T GetItem(int index)
12 {
13 return array[index];
14 }
15
16 public void SetItem(int index, T value)
17 {
18 array[index] = value;
19 }
20 }
三:継承における汎用的な処理
SubMyGenericArray int , , SubMyGenericArray2 ,
1 // class,interface, class
2 class MyGenericArray2<T> where T : struct
3 {
4 private T[] array;
5
6 public MyGenericArray2()
7 {
8 }
9
10 public MyGenericArray2(int size)
11 {
12 array = new T[size + 1];
13 }
14
15 public T GetItem(int index)
16 {
17 return array[index];
18 }
19
20 public void SetItem(int index, T value)
21 {
22 array[index] = value;
23 }
24 }
25
26 // int ,
27 class SubMyGenericArray : MyGenericArray2<int>
28 {
29
30 }
31
32 // ,
33 class SubMyGenericArray2<T> : MyGenericArray2<T> where T:struct
34 {
35
36 }