using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._1泛型概述 { class Program { static void Main(string[] args) { //集合与数组:①长度可以改变②添加数据时不用考虑具体类型,object List<int> list = new List<int>(); list.Add(2); list.Add(4); list.AddRange(new int[] { 1, 2, 3, 4, 5, 6 }); list.AddRange(list);//泛型可以添加自己 list.Insert(3, 100);//在索引为3处插入100 //list.Sort();//从小到大排序 //list.Reverse();//倒叙 for(int i=0;i<list.Count;i++) { Console.WriteLine(list[i]); } int[] nums = list.ToArray();//将泛型转换成数组 List<int> listTwo = nums.ToList();//nums可以转换成list Console.ReadKey(); } } }
结果:
2 4 1 100 2 3 4 5 6
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._3自定义泛型类的创建 { public class TGeneric<T>//创建泛型类 { public T Field; } class commonlyClass//普通类 { public T G<T>(T t)//普通方法 { return t; } } class TGenericTwo<T>//泛型类 { public T M(T t)//此方法有自己的类型参数列表,为泛型方法 { return t; } } class Program { static void Main(string[] args) { TGeneric<string> g = new TGeneric<string>(); g.Field = "51zxw.net"; Console.WriteLine(g.Field); Console.ReadKey(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._4类型参数_T { public class TGenericDemo<T> { void Exp(T input) { } } class Program { private class customClass//自定义类型,其余普通的int char类是一样的 { } static void Main(string[] args) { //实例化泛型类,gd1为char类型 TGenericDemo<char> gd1 = new TGenericDemo<char>(); Console.WriteLine("实例化类型为char的TGenercDemo的gd1成功"); TGenericDemo<int> gd2 = new TGenericDemo<int>(); Console.WriteLine("实例化类型为int的TGenercDemo的gd2成功"); TGenericDemo<string> gd3 = new TGenericDemo<string>(); Console.WriteLine("实例化类型为string的TGenercDemo的gd3成功"); TGenericDemo<customClass> gd4 = new TGenericDemo<customClass>(); Console.WriteLine("实例化类型为自定义类型的TGenercDemo的gd4成功"); Console.ReadKey(); } } }
结果:
实例化类型为char的TGenercDemo的gd1成功 实例化类型为int的TGenercDemo的gd2成功 实例化类型为string的TGenercDemo的gd3成功 实例化类型为自定义类型的TGenercDemo的gd4成功
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._6泛型继承之泛型类继承普通类 { public abstract class baseClass//普通基类的创建 { protected int user_name;//定义字段 public virtual int user_Name//定义属性 { get { return user_name; } set { user_name = value; } } public baseClass(int index)//构造函数 { user_name = index; } public abstract void method(int t);//方法 } public class TGenClass<T>:baseClass//泛型派生类 { protected new T user_name;//隐藏基类的同名成员 public new T user_Name { get { return user_name; } } public TGenClass(int index) : base(index)//构造函数 { } public TGenClass(T t):base(1000) { user_name = t; } public override void method(int t)//重载方法 { Console.WriteLine("调用方法成功"); } public void method(T t)//方法 { } } class Program { static void Main(string[] args) { int val = 1000; TGenClass<int> g = new TGenClass<int>(val); g.method(g.user_Name); Console.WriteLine("泛型继承演示成功:泛型类继承普通类"); Console.ReadKey(); } } }
结果:
泛型继承演示成功:泛型类继承普通类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._7泛型继承之普通类继承泛型类 { abstract class TgenClass<T>//泛型基类 { protected T field;//字段 public virtual T Filed { get { return field; } } public TgenClass(int index)//构造函数 { } public TgenClass(T t) { field = t; }//构造函数 public abstract void method(T t);//抽象方法 不需要方法体 } class ordinaryClass: TgenClass<int>//普通派生类 { public override int Filed { get { return base.Filed; } } public ordinaryClass(int t) : base(t) { }//构造函数 public override void method(int t) { Console.WriteLine("Field属性值为:{0}", t); } } class Program { static void Main(string[] args) { int val = 1000; ordinaryClass oc = new ordinaryClass(val); oc.method(val); Console.WriteLine("普通类继承泛型类演示成功"); Console.ReadKey(); } } }
结果:
Field属性值为:1000 普通类继承泛型类演示成功
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._8泛型继承之泛型类继承泛型类 { //定义泛型基类 //<T>T可以是任意的标识符,只要遵循我们的通常c#中的命名规则即可,比如多参数T1,T2,T3 abstract class TgenBaseClass<T1,T2> { //定义两个字段 public T1[] str; public T2[] ind;//索引字段 //定义一个索引属性 public T1 this [int index] { get { return str[index];} set { str[index] = value; } } //定义一个获取数组长度的属性 public int length { get { return str.Length; }//只读 } //构造函数 public TgenBaseClass(int index) { str = new T1[index]; ind = new T2[index]; } } //定义派生泛型类 class TgenClass<T>:TgenBaseClass<T,int> { public TgenClass(int index):base(index) { for(int i=0;i<length;i++) { ind[i] = i; } } //派生类中定义一个output方法 public void output() { for(int i=0;i<length;i++) { Console.WriteLine(str[i].ToString()); } } } class Program { static void Main(string[] args) { //实例化 TgenClass<string> gc = new TgenClass<string>(6); //添加元素的过程 gc[0] = "first"; gc[1] = "second"; gc[2] = "third"; gc[3] = "fourth"; gc[4] = "fifth"; gc[5] = "sixth"; //调用方法,遍历元素 gc.output(); Console.WriteLine("泛型继承之泛型类继承泛型类演示成功"); Console.ReadKey(); } } }
结果:
first second third fourth fifth sixth 泛型继承之泛型类继承泛型类演示成功
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._10泛型接口的使用 { public interface IMyinterface { } public interface IMyinterface<T> { } public interface IMyinterface <T1,T2>{ } public interface IRelation<T1,T2> { int Forward(T1 forward);//参数类型要么是封闭的,要么是由接口的参数列表来决定的 int Afater(T2 after);//只提供表示,不实现 T1 GetForward(int index); void GetAfter(int index, out T2 after); void change(ref T1 forward, ref T2 after); } class Program { static void Main(string[] args) { } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _10._11定义泛型方法 { public class myclass { //定义泛型方法 public bool Contains<T>(T[] TArray,T TValue) { //遍历元素 foreach(T t in TArray) { //判断是否存在TValue if (t.Equals(TValue)) return true;//存在返回true } return false;//不存在返回false } } class Program { static void Main(string[] args) { } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._12调用泛型方法 { public class myclass { //泛型方法实现 public bool Contains<T>(T[] TArray,T TValue) { foreach(T t in TArray) { if (t.Equals(TValue)) return true; } return false; } } class Program { static void Main(string[] args) { int[] myint = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; myclass mc = new myclass(); bool mybool; int testInt = 50; 完整调用 //mybool = mc.Contains<int>(myint, testInt); //简写调用 mybool = mc.Contains(myint, testInt); if (mybool) Console.WriteLine("数组中包含有元素" + testInt); else Console.WriteLine("数组中不存在元素" + testInt); Console.ReadKey(); } } }
结果:
数组中不存在元素50