本文主要是介绍C# 高级编程个人笔记搬运 六(泛型——方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
接着上一篇幅,因为太长了不方便看。正好泛型方法本来也是一个常用到的技术,就单独拎出来讲好了。
泛型方法:
不仅接口、类和结构可以是泛型的,方法也可以是泛型的。在泛型方法中,泛型类型用方法声明来定义。泛型方法可以在泛型类型中定义。Swap<T>()方法把T定义为泛型类型,该类型用于两个参数金额一个变量temp:
void Swap<T>(ref T x, ref T y)
{T temp;temp = x;x = yly = temp;
}把泛型类型赋予方法的调用,就可以调用泛型方法:
int i = 4;
int j = 5;
Swap<int>(ref i, ref j);
但是,因为C#编译器会通过调用Swap()方法来获取参数的类型,所以不需要把泛型类型赋予方法调用。泛型方法可以像非泛型方法那样调用。比如:Swap(ref i, ref j); 这样调用,而不需要指定<int>。
需要的注意的是T只代表一种类型,例如:
class Program{static void Main(string[] args){DDD(1,2);DDD("nnioa", 3); // 编译器报错,无法确定T是哪一个类型。因为我们多个蚕食都用了同一个类型T,但是这里传过去的两个参数确是不一样的类型。DDD(4.6, 5.6);}public static int DDD<T>(T x, T y){return 1;}}
如果你是对于不同的参数类型进行的传值,那么你可以告诉编译器,你有不同的类型,比如:
class Program{static void Main(string[] args){DDD(1,2);DDD("nnioa", 1); // 这时候多类型为参数也不会报错DDD(4.6, 5.6);}public static int DDD<T1,T2>(T1 x, T2 y){return 1;}}
除了泛型类可以带约束,泛型方法同样是可以带有约束的。例如我们可以约束T1:
public class Class1{public Class1(double u){k = u;}public Class1(string u){i = u;}public static int x =10;public int y = 11;public string i = "AAA";public static string j = "BBB";public double k;}class Program{static void Main(string[] args){DDD(Class1.x,2); // 报错,x是值类型,string是引用类型,报错信息提示没有装箱DDD(Class1.j, 1);// 报错信息:没有从string到Class1的隐式转换DDD(new Class1(3.1415928), 5.6);}// 我们给泛型方法做一个约束,约束T1必须是继承于Class1的public static int DDD<T1,T2>(T1 x, T2 y) where T1:Class1{return 1;}}
我们接着谈带委托的泛型方法。
这篇关于C# 高级编程个人笔记搬运 六(泛型——方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!