c#泛型Generic
2021/6/19 11:28:05
本文主要是介绍c#泛型Generic,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
泛型:是一种不确定的数据类型
为什么要用泛型,先看一个小例子
定义两个普通方法
public class Method { public static void ShowInt(int IntValue) { Console.WriteLine($"IntValue={IntValue}"); } public static void ShowString(string StrValue) { Console.WriteLine($"StrValue={StrValue}"); } }View Code
方法在创建时就确定了参数类型,如果有10,20个类型我们要写20个方法吗?
不是,还有一种方法可以试应不同类型object
我们在写一个方法
public static void ShowObj(object ObjValue) { Console.WriteLine($"ObjValue={ObjValue}"); }View Code
这样一个object方法就可以 任何一个使用父类的地方都可以用子类代替,object是所有类型的父类,
那有这一个方法不就行了,为什么用泛型呢?
这样写有两个问题:
1:装箱拆箱 (主要是c#内存分配问题,在c#程序运行时,内存分两块空间,一个是线程栈 ,一个进程堆。
值类型在栈里,引用类型在堆里。如果我们传递一个数字1,它是值类型应该是在栈里,但是我们调用方法的时候他是一个object类型的,它传递的只是一个引用,任何一个引用类型的变量保存的只是一个引用,它会指向堆内存的一块空间。
那我们传递的是一个值类型怎么变成引用类型了-------装箱 把值类型从栈里拷贝到堆里面
那我们希望用的时候是一个int是一个值类型那么就需要------拆箱 在从堆里拷贝到栈里面
) 有性能损失。
2:类型安全问题。因为是object类型所以什么类型都能传入 没办法约束传入类型
所以就用到泛型方法: 一个方法满足不同类型的参数
方法名字后面多了个类型参数<>
public static void Show<T>(T tValue) { Console.WriteLine($"tValue={tValue}"); }View Code
声明时没有确定类型,调用时确定 类型参数要和参数类型一致
int IntValue = 1; string StrValue = "Mike"; Console.WriteLine("=====普通方法===="); Method.ShowInt(IntValue); Method.ShowString(StrValue); Console.WriteLine("======Object======"); Method.ShowObj(IntValue); Method.ShowObj(StrValue); Console.WriteLine("======Generic====="); Method.Show<int>(IntValue); Method.Show<string>(StrValue);
这篇关于c#泛型Generic的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#