泛型

C#泛型特性

匿名 (未验证) 提交于 2019-12-02 23:47:01
泛型概念 :泛型是通过参数化类型来实现同一份代码上操作多种数据类型 为什么用泛型:减少装箱拆箱提高运行效率 类型安全 代码重用 泛型的优点: 1.泛型增强了代码的可读性 2.泛型实现代码重用 提高性能 3.类型安全 4.泛型实现了类型和方法的参数化 5.对泛型类进行约束以访问特定数据类型的方法。 泛型的约束: T:结构 值类型可以指定除 Nullable 以外的任何值类型 T:类 引用类型 包括类 接口 委托 数组类型 T:new() 类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new()?约束必须最后指定。 T:<基类名> 类型参数必须是指定的基类或派生自指定的基类。 T:<接口名称> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。 泛型方法更加灵活 可以存在泛型类也可以存在费泛型类

泛型反射

匿名 (未验证) 提交于 2019-12-02 23:43:01
泛型概述:通用的类型 <T>:T,叫做参数类型变量 <String> : String ,实际类型参数 获取实现的接口或继承的类上的参数化类型的API: Type[] getGenericInterfaces(); :获得带有泛型的接口,可以实现多个接口。 Type getGenericSuperclass(); :获得带有泛型的父类,继承一个类。 在设置通用Dao时: 方法一: 方法二:设置有参构造,但需要在子类中也要编写构造方法(不推荐)

SIKI学习――C#中级教程_14泛型类的定义

匿名 (未验证) 提交于 2019-12-02 23:30:02
1.泛型类的定义 1.泛型是什么? 通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。 2.泛型类定义 定义一个泛型类就是指的是,定义一个类,这个类中某些字段的类型是不确定的,这些类型可以在类构造的时候确定下来,举例: 创建一个类处理int类型和double类型的相加 class ClassA< T > { private T a; private T b; public ClassA(T a,T b) { this.a = a ; this.b = b; } public T GetSum() { return a+“”+b; } } 例子: namespace 泛型和泛型类 { class Program { static void Main(string[] args) { var o1 = new ClassA<int>(12,34);//当我们利用泛型类构造的时候,需要指定泛型的类型 string s = o1.GetSum(); Console.WriteLine(s); Console.ReadKey(); } } } namespace 泛型和泛型类 { class Program { static void Main(string[] args) { var o2 = new ClassA<string>(

泛型

匿名 (未验证) 提交于 2019-12-02 23:26:52
泛型 概念: 是一种未知的数据类型,相当于是一个标签,以便以后方便使用。 注意:泛型必须是引用数据类型 优点: 1.避免了类型转换的麻烦,存储的是什么数据类型取出的就是什么数据类型 2.把运行期异常(代码运行之后会抛出异常),提前到了编译期(代码编译时候抛 出的异常) 3.提高了代码的复用性 方法的定义: 格式: 修饰符 返回值类型 方法名称(参数列表){//在参数列表中是可以直接使用泛型 } 注意:泛型方法,必须要先定义泛型,才能够使用 接口的定义: 格式:interface 接口名称{} 注意:实现类在实现该接口的时候,泛型如何处理: 1.在实现接口的时候,接口直接给定具体的数据类型. 实现类中可以不再定义泛型了 2.如果接口中的泛型不给定具体数据类型,那么实现类中必须也要有泛型,该泛型必须要和接口的泛型一致 通配符: 格式:? 含义:代表任意的数据类型,但是?不知道具体是什么类型 泛型的限定: 上限限定: 格式:? extends E 含义:代表使用的泛型只能是E类型的子类/本身。固定上边界。?代表的是E或者E的子类。(可以理解为<=Max) 下限限定: 格式:? super E 含义:代表使用的泛型只能是E类型的父类/本身。固定下边界。?代表的是E或者E的父类/父接口。(可以理解为>=Min) 转载请标明出处: 泛型 文章来源: https://blog.csdn.net

java泛型温习

匿名 (未验证) 提交于 2019-12-02 23:00:34
一些关于泛型的例子(有的是借鉴别人的) 1.java泛型的本质:编译时有限制,运行时类型擦除 2.java泛型中没有继承关系即: Integer extends Number 成立 <Integer> 继承<Number> 不成立 3.java泛型的上下边界 限定通配符的上边界 正确:Vertor<? extends Number> x=new Vector<Integer>(); 错误: Vector<? extends Number> y=new Vector<String>(); 限定通配符的下边界 正确:Vector<? super Integer> x=new Vector<Number>(); 错误:Vector<? super Integer> y=new Vector<Byte>(); public class Generic<T> { private T t; public void setT(T t) { this.t = t; } public T getT() { return t; } public void test1() { List list = new ArrayList(); list.add(123456); list.add("llilamei"); Integer integer = (Integer) list.get(0);

Java 语法学习笔记(二)

独自空忆成欢 提交于 2019-12-02 22:57:41
Java 语法学习笔记(二) 文章目录 Java 语法学习笔记(二) 参考教程 介绍 Java 内置包装类 Object 类 Number 类 System 类 System 类的成员变量 System 类的成员方法 Math 类 Character 类 && String 类 Character 类 String 类 StringBuffer 和 StringBuilder 类 Java 集合 接口、实现、算法的关系 Collection 接口 数组 List Set Map Java 泛型 泛型高级用法 参考教程 菜鸟教程 — Java 教程 IBM — Java 编程简介,第 1 部分 C语言中文网 — Java内置的包装类 介绍 Java 许多语法跟 C/C++,比较相似。本人学习过 C/C++/Python , 因此仅记录 Java 语法特有的部分。 Java 内置包装类 Object 类 Object 是 Java 类库中的一个特殊类,也是所有类的父类。当一个类被定义后,如果没有指定继承的父类,那么默认父类就是 Object 类 Object 类包含 clone 、 equals 、 notify 、 hashCode 等方法 Number 类 Java 语言为每一个内置数据类型(原语类型)提供了对应的包装类。 所有的包装类(JDK 类)(Integer、Long

C#泛型

匿名 (未验证) 提交于 2019-12-02 22:56:40
一、泛型与类 二、泛型与接口 三、泛型与类型成员 四、泛型与委托 五、泛型约束 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; /* 泛型与接口 * 泛型与类 * 泛型方法 * 泛型与委托 * .NET类库中自带的 Action Func 泛型委托 */ namespace MyApp { public delegate void MyDel<T>(T arg); //自己定义的泛型委托 public interface IDemo<T> { void SetObject(T t); T GetObject { get; } } public class TestA : IDemo<float> { private float _val; public void SetObject(float t) { this._val = t; } public float GetObject { get { return this._val; } } } public class TestB<U> : IDemo<U> { private U _value; public void SetObject(U t)

关于C#中泛型类型参数约束(where T : class)

匿名 (未验证) 提交于 2019-12-02 22:56:40
.NET支持的类型参数约束有以下五种: 如下在WPF中获取当前窗体(或者用户控件)的父窗体,限定泛型必须为Class: private void btnCancel_Click(object sender, RoutedEventArgs e) { Window hostWindow = GetParent<Window>(sender as Button); if (hostWindow != null) { hostWindow.Close(); } } public static T GetParent<T>(UIElement uiElement) where T : class { T result; var dp = LogicalTreeHelper.GetParent(uiElement); result = dp as T; while (result == null) { dp = LogicalTreeHelper.GetParent(dp); result = dp as T; if (dp == null) return null; } return result; } 原文:https://www.cnblogs.com/YzpJason/p/9358850.html

SGI STL泛型heap算法分析

无人久伴 提交于 2019-12-02 22:16:50
heap性质 heap本质是用一个数组表示的完全二叉树,并且父节点总是大于(或者小于)子节点的值。在STL中用于实现优先队列(priority_queque)。堆排序是排序算法中是稳定效率最高的一种。STL以可以动态扩容的vector作为heap的底层数组。 push_heap分析 为满足完全二叉树的条件,新加入元素一定要放在最下一层作为叶子节点,并填补由左至右的第一个空格,也就是把新元素插入到底层vector的end()处。下图是push_heap算法的实际示意图: 从图中可以看出push_heap算法的过程是将新加入堆的值(50),层层上挪,直到正确的位置。下面是该过程的源码: template <class RandomAccessIterator, class Distance, class T> void __push_heap(RandomAccessIterator first, Distance holeIndex, Distance topIndex, T value) { Distance parent = (holeIndex - 1) / 2; //找出父节点 while (holeIndex > topIndex && *(first + parent) < value) { //尚未到达顶端且父节点小于洞值,使用operator<,知max-heap *

C#集合

匿名 (未验证) 提交于 2019-12-02 22:10:10
一、 集合概述   没有掌握集合的知识之前,我们通常都是用数组来存储元素。数组有一个很明显的特点就是,长度是固定的。假设,用数组存储一组员工信息,显然公司的员工数量是有流动性的,如果来了新员工,那么以现有的知识来思考,这个数组只能重新定义。能否建立一个动态的 “数组”,使我们可以对其进行动态的操作呢?下面就引入集合,来解决这个问题。 二、 ArrayList ArrayList 属于非泛型集合,现在大多数情况用的很少了。文章里会首先介绍非泛型集合,是因为引出泛型集合,就像通过数组引出集合的概念一样。 ArrayList 可能会介绍的详细一点,这都是为了后面的内容做铺垫。 1.简介 ArrayList 非常类似于数组,可以填补数组的不足,进行元素的动态维护。数组的长度是固定的,而 ArrayList 的容量可以根据需要自动扩充,它的索引会根据程序的扩展而重新分配和调整。 ArrayList 是可以动态维护的,因此在定义的时候可以指定容量,也可以不指定容量。 如图: 2.给ArrayList添加数据 重点: 如果Add()添加的元素是值类型,这些元素都会装箱处理转换为Object引用类型。因此ArrayList中所有的元素都是引用类型。 b.通过集合初始化器构造集合 3.存取ArrayList中的单个元素 4.删除ArrayList中的元素 4.1.RemoveAt(