【C#】C# in deep 泛型
2021-03-29 08:30
标签:数据类型 泛型类 实例化 函数 哪些 作用 类型转换 大量 except 在泛型出现之前, 代码中会有很多需要强制转换的地方. 比如 int a = (int) object, 对于这样类似的代码, 编译器在编译期间无法确定是否是正确的代码, 只有在真正运行代码期间才会校验出来是否正确. 这种强制转换实际上是让编译器去相信你的代码. 并且你需要撰写大量的文档或者注释去解释你的代码.还有的时候你在写代码的时候, 会遇到两个代码块极其的相似, 只是参数类型上有所区别. 一个是对int类型进行操作, 一个是对string类型进行操作. 但是你不得不写两份, 或者你写出了一个公共的object去处理. 但是在使用object的功能时候, 又同样会遇到很多装箱拆箱, 也可能会遇到各种执行时ClassCastException的异常. 泛型的出现就是为了解决上述情况. 让编译器在编译期间就能够发现这种错误, 从而在执行期间减少检查还有很多的装箱和拆箱的处理, 来达到一个提升程序性能的一个目的. 所以泛型的优势在于: 1.它是类型安全的。实例化了int类型的栈,就不能处理String类型的数据,其他的数据类型也一样。 2.无需装箱和拆箱。这个类在实例化时,按照所传入的数据类型生成本地代码,本地代码数据类型已确定,所以无需装箱和拆箱。 3.无需类型转换。 用这些约束可以限制T是哪些. 1. 值约束 T:struct 2. 引用约束 T:Class 3. 构造函数约束 T: new() 4. 转换类型约束 5. 组合约束 【C#】C# in deep 泛型 标签:数据类型 泛型类 实例化 函数 哪些 作用 类型转换 大量 except 原文地址:https://www.cnblogs.com/it-dennis/p/9151862.html泛型
为什么要有泛型, 在没有泛型之前, 什么东西充当了泛型的作用?
1 public class Stack
2 {
3
4 private object[] m_item;
5
6 public object Pop() {...}
7
8 public void Push(object item) {...}
9
10 public Stack(int i)
11 {
12
13 this.m_item = new[i];
14
15 }
16 }
1 public class Stack
Stackint> a = new Stackint>(100);
a.Push(10);
a.Push("8888");//这行编译不通过,因为类a只接收int类型的数据
int x = a.Pop();
Stack
泛型分为 泛型类, 和泛型方法.
泛型中的约束有哪些:
下一篇:c#快速热身