国内做网站的企业,建设网站网站建设公司,企业互联网整合营销,制作网站需要多少费用【C#】泛型
泛型是什么
泛型是将类型作为参数传递给类、结构、接口和方法#xff0c;这些参数相当于类型占位符。当我们定义类或方法时使用占位符代替变量类型#xff0c;真正使用时再具体指定数据类型#xff0c;以此来达到代码重用目的。
泛型特点
提高代码重用性一定…【C#】泛型
泛型是什么
泛型是将类型作为参数传递给类、结构、接口和方法这些参数相当于类型占位符。当我们定义类或方法时使用占位符代替变量类型真正使用时再具体指定数据类型以此来达到代码重用目的。
泛型特点
提高代码重用性一定程度避免装箱拆箱
泛型分类
声明 泛型类 基本语法
class 类名泛型占位字母声明 泛型结构 基本语法
struct 结构名泛型占位字母声明 泛型接口 基本语法
interface 接口名泛型占位字母声明 泛型函数 基本语法
函数名泛型占位字母(参数列表)注意泛型占位字母可以有多个用逗号分开代码展示
1. 泛型类
class TestClassT
{public T value;
}
class TestClass2T1, T2, K, J
{public T1 value1;public T2 value2;public K value3;public J value4;
}
class Program
{static void Main(string[] args){//使用时必须指定具体数据类型如int类型TestClassint t new TestClassint();t.value 5;Console.WriteLine(t.value);//输出5//再创建一个对象将泛型指定为string类型这里说明泛型可以提高代码重用性TestClassstring t2 new TestClassstring();t2.value 123456;Console.WriteLine(t2.value);//输出123456//创建一个有多个泛型类的对象TestClass2int, string, bool, TestClassfloat t3 new TestClass2int, string, bool, TestClassfloat();Console.ReadLine();}
}2. 泛型结构体
struct TestStructT
{public T value;
}
class Program
{static void Main(string[] args){//创建结构体对象TestStructbool ts new TestStructbool();Console.WriteLine(ts.value);//输出FalseConsole.ReadLine();}
}3. 泛型接口及类继承
interface TestInterfaceT
{T value{get;set;}
}class Test : TestInterfaceint
{private int myValue;public int value {get{return myValue;}set{myValue value;}}
}
class Program
{static void Main(string[] args){//创建接口实例Test类是实现 指定泛型为int类型的接口 的类所以创建接口实例时泛型指定类型必须与Test类指定的泛型类型一致 即int类型TestInterfaceint it new Test();it.value 100;Console.WriteLine(it.value);//输出100Console.ReadLine();}
}创建接口实例时泛型指定类型必须与Test类指定的泛型类型不一致时会报错。
4. 泛型方法
普通类中的泛型方法
class Test2
{//泛型作为参数传递public void TestFunT(T value){Console.WriteLine(value);}//泛型作为返回值public T TestFunT(bool v){return default(T);}//泛型既不作为参数传递 也不作为返回值public void TestFunT(){//用参数类型在里面进行逻辑处理例如T t default(T);//获得类型的默认值方法default()Console.WriteLine(t);}//多个泛型作为参数传递public void TestFunT, K, M(T t, K k, M m){}
}
class Program
{static void Main(string[] args){//创建Test2对象Test2 tt new Test2();tt.TestFunfloat(12.5f);//作为参数传递时 输出12.5tt.TestFunstring(true);//作为返回值tt.TestFunint();//既不作为参数传递 也不作为返回值 输出0tt.TestFunint, double, bool(1, 8.888888, false);//多个作为参数传递Console.ReadLine();}
}泛型类中的泛型方法
//Test2 与 Test2T 名字一样但是后者有泛型就相当于新的类两个类是不一样的
class Test2T
{public T value;//这个不叫泛型方法 因为 T是泛型类声明的时候 就指定的 在使用这个函数的时候 不能进行动态变化public void TestFun(T t){Console.WriteLine(No : t);}//这个才是泛型方法 一直是方法名后面加了尖括号并且有占位符public void TestFunK(K k){Console.WriteLine(YES : k);}
}class Program
{static void Main(string[] args){Test2int tt2 new Test2int();//这两个不是同一个方法tt2.TestFun(156);//输出No :156tt2.TestFunint(156);//输出YES :156//这两个同一个方法tt2.TestFunstring(123);//输出YES :123tt2.TestFun(789);//输出YES :789}
}tt2.TestFun(156); 与 tt2.TestFun(156); 调用的方法如下 tt2.TestFun(“123”); 与 tt2.TestFun(“789”); 调用的方法如下
【tt2】是一个泛型为【int类型】的【Test2】对象使用tt2.TestFun()方法时传入的参数与对象的泛型一致时则会调用【public void TestFun(T t)】。传入的参数与对象的泛型不一致时则会调用同名的泛型方法【public void TestFunK(K k)】且调用时可以省略尖括号【】通过参数直接判断该方法的泛型数据类型。小结
声明泛型时就是一个任意类型的占位符真正起作用是在使用它时。泛型占位符至少有一个可以有无数个多个时用逗号分隔开。文章提到的default目的是用来获取任意类型的默认值的。 因为作者精力有限文章中难免出现一些错漏敬请广大专家和网友批评、指正。