using System; using System.Collections.Generic; using System.Text; namespace 自定义泛型 { /// <summary> /// @author ZJC /// 1.自定义泛型类 /// 2.自定义泛型接口,封闭类型、开放类型介绍 /// 3.泛型约束 /// 泛型的目的也是为了代码重用 /// </summary> class Program { // //class MyGeneric<T,K,L,D,C> //下面是一个自定义泛型类的实例 class MyGeneric<T> { public class Car { Car() { Console.WriteLine("Car..."); } } public class Course { Course() { Console.WriteLine("course..."); } } public MyGeneric(int len) { arr = new T[len]; } private T[] arr; public T this[int index] //索引器 { get { return arr[index]; } set { arr[index] = value; } } } //以下是:自定义泛型接口 实例 public interface ITest<T> { void M1(T t); } public class MyGeneric2 : ITest<string> //封闭类型,固定为string { public MyGeneric2() { Console.WriteLine("kk"); } public void M1(string t) { Console.WriteLine(t); } } public class MyGeneric3<T> : ITest<T> //开放类型,类型不固定 { public void M1( T t) { Console.WriteLine(t.GetType()); } } //泛型约束 public class Person<T, T1, T2> where T : struct where T1 : class where T2 : new() //约束了T 必须是【值类型】,T1 必须是【引用类型】,T2这个类型必须带有无参构造函数,要求构造函数不能为私有且类型不能是抽象的。 { public T age { get; set; } public T1 Mycourse { get; set; } public T2 Mycar { get; set; } } static void Main(string[] args) { MyGeneric<string> test = new MyGeneric<string>(3); test[0] = "成龙"; test[1] = "李连杰"; test[2] = "甄子丹"; Console.WriteLine(test[0]+"\n"+test[1]+"\n"+test[2]); MyGeneric2 test2 = new MyGeneric2(); test2.M1("自定义泛型接口"); MyGeneric3<int> test3 = new MyGeneric3<int>(); test3.M1(5); Person<int,MyGeneric2,MyGeneric2> test4 = new Person<int,MyGeneric2,MyGeneric2>(); } } }
C#——自定义泛型典例实战
最新推荐文章于 2024-04-28 20:47:47 发布