zoukankan      html  css  js  c++  java
  • C#自定义泛型总结

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace _03泛型约束
     7 {
     8 
     9     class Student
    10     {
    11 
    12     }
    13     class Program
    14     {
    15         static void Main(string[] args)
    16         {
    17             Person<Student, int, Car, Car, int, Student> p1 = new Person<Student, int, Car, Car, int, Student>();
    18             // p1.Age = "豆蔻";
    19 
    20         }
    21     }
    22     //where T1 : struct ,表示约束了类型T1必须是[值类型]
    23     public class Person<T, T1, TC, TK, TV, TU>
    24         where T1 : struct //约束T1必须是值类型
    25         where T : class, new()//约束T必须是引用类型
    26         where TC : new()  //这个类型必须带有一个无参数的构造函数【要求:1.构造函数不能为私有,2.类型不能是抽象的。】
    27         where TK : Car //这里约束了TK类型,必须是Car类型或者是Car类型的子类
    28         where TV : IComparable //约束类TV必须是实现IComparable接口的类型。
    29         where TU : T  //约束了TU必须是T的子类。或者是T类型。
    30     {
    31 
    32         public T Name
    33         {
    34             get;
    35             set;
    36         }
    37         public T1 Age
    38         {
    39             get;
    40             set;
    41         }
    42         public T Email
    43         {
    44             get;
    45             set;
    46         }
    47 
    48         public TC MyCar
    49         {
    50             get;
    51             set;
    52         }
    53 
    54     }
    55     public class Car
    56     {
    57         public Car()
    58         {
    59             this.Brand = "捷安特";
    60         }
    61         public Car(string brand)
    62         {
    63             this.Brand = brand;
    64         }
    65         public string Brand
    66         {
    67             get;
    68             set;
    69         }
    70     }
    71 }
    泛型约束
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace _01自定义泛型
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Type Parameters
                //T:   其实就是一个占位符,将来用对应的类型来代替。
                //TKey,TValue,TOutput,TReuslt
                //  List<int> list = new List<int>();
                //List<
                //list.Add(
                //Dictionary<
    
    
                //MyList ml = new MyList();
                //Console.WriteLine(ml[4]);
                ////MyListString mls = new MyListString();
                ////mls[0] = "yzk";
                ////mls[1] = "sk";
    
                MyListGeneric<int> mlg = new MyListGeneric<int>(100);
                mlg[0] = 10;
                mlg[1] = 101;
                mlg[2] = 102;
                Console.WriteLine(mlg[2]);
    
                Console.WriteLine("=============================");
                MyListGeneric<string> mlgString = new MyListGeneric<string>(100);
    
                mlgString[0] = "yzk";
                mlgString[1] = "sk";
                mlgString[2] = "jk";
                Console.WriteLine(mlgString[1]);
    
    
                Console.WriteLine("=========================");
                Person p1 = new Person() { Name = "yp", Age = 100 };
                Person p2 = new Person() { Name = "hf", Age = 109 };
                MyListGeneric<Person> mlgPerson = new MyListGeneric<Person>(100);
                mlgPerson[0] = p1;
                mlgPerson[1] = p2;
                Console.WriteLine(mlgPerson[1].Name);
                Console.ReadKey();
            }
        }
    
        public class Person
        {
            public string Name
            {
                get;
                set;
            }
            public int Age
            {
                get;
                set;
            }
            public string Email
            {
                get;
                set;
            }
    
        }
    
        class MyList
        {
            int[] arrInt = new int[] { 10, 20, 30, 40, 50, 60, 70 };
    
            public int this[int index]
            {
                get
                {
                    return arrInt[index];
                }
                set
                {
                    arrInt[index] = value;
                }
            }
        }
    
        class MyListString
        {
            string[] arrInt = new string[100];
    
            public string this[int index]
            {
                get
                {
                    return arrInt[index];
                }
                set
                {
                    arrInt[index] = value;
                }
            }
        }
    
        //泛型的目的也是为了代码重用(算法重用)
        //class MyListGeneric<T,K,V,TOut,T1>
        class MyListGeneric<T>
        {
    
            public MyListGeneric(int len)
            {
                arr = new T[len];
            }
            //代码结构,算法一模一样,只是数据类型变了。
            // T[] arr = new T[100];
            private T[] arr;
    
            public T this[int index]
            {
                get
                {
                    return arr[index];
                }
                set
                {
                    arr[index] = value;
                }
            }
    
            public void SayHi(T t)
            {
                Console.WriteLine(t);
            }
        }
    }
      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 
      6 namespace _02泛型接口
      7 {
      8     class Program
      9     {
     10         static void Main(string[] args)
     11         {
     12             MyClass1<string> mc1 = new MyClass1<string>();
     13             //mc1.M1
     14             Person p = new Person();
     15             //泛型方法,类本身不是泛型的,只有调用该方法的时候需要指定一下。
     16             p.SayHi<string>("hi!!!!");
     17             Console.ReadKey();
     18         }
     19     }
     20 
     21     public interface ITest<T>
     22     {
     23         void M1(T t);
     24 
     25         T M2();
     26 
     27         void M3(T obj);
     28 
     29         T PValue
     30         {
     31             get;
     32             set;
     33         }
     34     }
     35 
     36     //实现接口时候的两种方式。
     37 
     38     //“封闭类型”
     39     class MyClass : ITest<string>
     40     {
     41 
     42         #region ITest<string> 成员
     43 
     44         public void M1(string t)
     45         {
     46             throw new NotImplementedException();
     47         }
     48 
     49         public string M2()
     50         {
     51             throw new NotImplementedException();
     52         }
     53 
     54         public void M3(string obj)
     55         {
     56             throw new NotImplementedException();
     57         }
     58 
     59         public string PValue
     60         {
     61             get
     62             {
     63                 throw new NotImplementedException();
     64             }
     65             set
     66             {
     67                 throw new NotImplementedException();
     68             }
     69         }
     70 
     71         #endregion
     72     }
     73 
     74     //“开放类型”
     75     class MyClass1<T> : ITest<T>
     76     {
     77 
     78         #region ITest<T> 成员
     79 
     80         public void M1(T t)
     81         {
     82             throw new NotImplementedException();
     83         }
     84 
     85         public T M2()
     86         {
     87             throw new NotImplementedException();
     88         }
     89 
     90         public void M3(T obj)
     91         {
     92             throw new NotImplementedException();
     93         }
     94 
     95         public T PValue
     96         {
     97             get
     98             {
     99                 throw new NotImplementedException();
    100             }
    101             set
    102             {
    103                 throw new NotImplementedException();
    104             }
    105         }
    106 
    107         #endregion
    108     }
    109 
    110 
    111 
    112     //=====================泛型方法=====================
    113 
    114     public class Person
    115     {
    116         public string Name
    117         {
    118             get;
    119             set;
    120         }
    121         public int Age
    122         {
    123             get;
    124             set;
    125         }
    126         public string Email
    127         {
    128             get;
    129             set;
    130         }
    131         //泛型方法
    132         public void SayHi<T>(T msg)
    133         {
    134             Console.WriteLine(msg);
    135         }
    136 
    137     }
    138 }
  • 相关阅读:
    Windows消息初探(1)
    配置Git Extension免密码发布代码到CSDN
    一个简单的参数校验类
    Functions类,一个Javascript的函数加法类,将两个函数加起来,顺序执行
    对Javascript异步执行的理解
    aws在线技术峰会笔记-游戏解决方案
    aws在线技术峰会笔记-主会场
    努力成长为一只全栈工程师
    翻译:在Ubuntu 14.04上安装FTP服务器的方法
    奇妙的时间旅程
  • 原文地址:https://www.cnblogs.com/-qq593790351/p/3211100.html
Copyright © 2011-2022 走看看