泛型

C#2.0新增功能02 泛型

好久不见. 提交于 2020-03-23 20:02:06
系列目录 【已更新最新开发文章,点击查看详细】   C# 语言和公共语言运行时 (CLR) 的 2.0 版本中添加了泛型。 泛型将类型参数的概念引入 .NET Framework,这样就可以设计具有以下特征的类和方法:在客户端代码声明并初始化这些类和方法之前,这些类和方法会延迟指定一个或多个类型。 泛型定义    泛型是为所存储或使用的一个或多个类型具有占位符(类型形参)的类、结构、接口和方法。 泛型集合类可以将类型形参用作其存储的对象类型的占位符;类型形参呈现为其字段的类型和其方法的参数类型。 泛型方法可将其类型形参用作其返回值的类型或用作其形参之一的类型。 以下代码举例说明了一个简单的泛型类定义。   public class Generic<T> { public T Field; } 创建泛型类的实例时,指定用于替代类型形参的实际类型。 在类型形参出现的每一处位置用选定的类型进行替代,这会建立一个被称为构造泛型类的新泛型类。 你将得到根据你选择的类型而定制的类型安全类,如以下代码所示。 public static void Main() { Generic<string> g = new Generic<string>(); g.Field = "A string"; //... Console.WriteLine("Generic.Field = \"{0}\"", g

2019-05-26 Java学习日记 day16

有些话、适合烂在心里 提交于 2020-03-21 08:19:05
集合框架 List ArrayList去重复方法 public class demo1_ArrayList { public static void main(String[] args) { //创建新集合将重复元素去掉 ArrayList list =new ArrayList(); list.add("a"); list.add("a"); list.add("c"); list.add("c"); list.add("a"); ArrayList newlist=getSing(list); System.out.println(newlist); } public static ArrayList getSing(ArrayList list){ ArrayList newlist = new ArrayList<>();//创建新集合 Iterator it = list.iterator(); //根据传入的集合(老集合)获取迭代器 while (it.hasNext()) { //遍历老集合 Object obj1= it.next(); //记录每一个元素 if (!newlist.contains(obj1)) { //如果新集合不包含老集合中的元素 newlist.add(obj1); //将该元素添加 } } return newlist; } } 练习题

Day16_集合第二天

你说的曾经没有我的故事 提交于 2020-03-21 08:15:46
1、LinkedList类( 掌握 ) 1、特点 底层数据结构是链表,查询慢,增删快 线程不安全,效率高 。 LinkedList 成员方法 void addFirst(Object o) 添加 void addLast(Object o) Objcet getFirst() 获取 Object getLast() Object removeFirst() 删除 Object removeLast() 2、栈和队列数据结构( 掌握 ) 1、栈 特点:先进后出 2、队列 特点:先进先出 3、数组 特点:查询快,增删慢 4、链表 特点:查询慢,增删快 数据结构面试题:模仿Stack 3、泛型(能看懂什么是泛型的声明,什么是泛型的使用即可) 1、概述 泛型是一种把明确类型的工作放在了创建对象或者调用方法时候才去明确的特殊的类型 泛型就相当于一个预定义类型 2、好处( 掌握 ) B、把系统运行期间的异常提前到了编译期间,提高了安全性 C、优化了程序设计,不需要做强制转换了 3、不足( 掌握 ) 泛型传入的只能是引用类型 4、泛型通配符 <?> 任意类型 <? extends E> E包括E的子类,也叫向下限定 <? super E> E包括E的父类,也叫向上限定 3、泛型的定义 A、在类上定义 说明: T,S是名字,可以随意起,该处定义的泛型可以在本类的任意地方使用

c# 泛型学习(一)

无人久伴 提交于 2020-03-21 04:39:54
.net 从2.0开始支持泛型。泛型可以帮助我们 创建独立于被包含类型 的类和方法。 不必再为不同类型编写功能相同的方法或类了,只要创建一个泛型类或者方法就可以实现对多种数据类型的操作。 object类型虽然也能让你实现这样的功能,但它不是类型安全的。 泛型不仅是c#语言的一种结构,而且是CLR定义的。所以,在c#中定义的泛型类,也可以在vb中用一个特定的类型实例化该泛型。 object实现与泛型实现 static void Main(string[] args) { //System.Collections命名空间下面的ArrayList类,存储的是对象 //Add()方法,添加值类型数据时,需要将参数装箱,转为object类型,在访问数据时,需要将 //数据进行拆箱,要进行强制转换。 var list = new ArrayList(); list.Add(44); int i1 = (int)list[0]; foreach (int item in list) { Console.WriteLine(item); } //System.Collections.Generic命名空间下面的List<T>,是一个泛型类。 //类型定义为int,所以int类型在jit编译器动态生成的类中使用,编译之后生成新的类型。这个类型就是接受int参数的一个类型 //不再进行拆箱和装箱。 /

ORM组件XCode(十八般武艺)

南楼画角 提交于 2020-03-20 07:23:56
之前,XCode总是若隐若现,耐性好的同学想知道它还有啥特点,沉不住气的则认为不过是CURD耳! XCode开发模式是灵魂,XCode组件通过具体实现对其支持! XCode的特点如下: 0、基本的CURD功能 实在想不出来不支持CURD的ORM算不算ORM;也实在想不出来仅有CURD的ORM算不算ORM。因而,这是0号功能! XCode的CURD通过反射实体类生成查询和操作SQL实现,数据库结构信息通过特性附在实体类上。之所以选择SQL而不是DbCommand,因为XCode的实体层和数据访问层是分开的,目前是为了实现一级缓存,将来会在这里实现分布式数据访问。 1、完美支持ObjectDataSource XCode实现充血模型(胀血模型)的实体类,提供ObjectDataSource需要的所有方法和参数,特别支持分页和排序功能! 详见 《与ObjectDataSource共舞》 2、全面分页支持 只有从小处开始培养分页的思想,任何查询都指定所需获取数据范围,才能保证系统数据变大时系统不会拓机。 XCode的分页以任意查询语句为基础,支持统计等非常复杂的查询分页。并且会根据当前数据库类型以及版本选择最佳分页方案。 详见 《撬动千万级数据》 3、实体集合支持 实体集合EntityList<TEntity>继承自List<TEntity>,提供了实体的批量操作

Java 泛型(二) 泛型之中的通配符(Wildcards)使用

℡╲_俬逩灬. 提交于 2020-03-19 21:46:16
泛型之中的通配符(Wildcards)使用 限制泛型可用类型   在定义泛型类别时,预设可以使用任何的类型来实例化泛型类型中的类型。   但是如果想限制使用泛型类别时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用 extends 关键字 指定这个类型必须是继承某个类,或者实现某个接口,也可以是这个类或接口本身。   比如下面的例子:    import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; public class ListGenericFoo<T extends List> { private T[] fooArray; public T[] getFooArray() { return fooArray; } public void setFooArray(T[] fooArray) { this.fooArray = fooArray; } public static void main(String[] args) { ListGenericFoo<LinkedList> foo1 = new ListGenericFoo<LinkedList>(); ListGenericFoo

泛型方法

北城余情 提交于 2020-03-17 22:57:26
泛型方法 假设需要实现这样一个方法———该方法负责将一个Object[]数组的所有元素添加到一个Collection集合中 static void fromArrayToCollection(Object[] a, Collection<Object> b){ for (Object o:a){ b.add(o); } } 这个方法没有任何问题,关键在于方法中的b形参,它的数据类型是Collection 。那么这个功能的方法就非常有限了,他只能将Object[]数组的元素复制到元素为Object(Object的子类不行)的Collection集合中。 public static void main(String[] args) { String[] strings = {"a", "b"}; List<String> stringList = new ArrayList<>(); //Collection<String>对象不能当成Collection<Object>使用,下面编译错误 fromArrayToCollection(strings,stringList); } 这种情况下,使用类型通配符也不可以,因为Java不允许把对象放进一个未知类型的集合中。 为了解决这个问题,可以使用 Java 5 提供的 泛型方法 :在声明方法时,定义一个或多个类型形参。 /

Java和C#语法对比

好久不见. 提交于 2020-03-17 08:57:18
引言 工作上需要用到Java和C#,两者语法大同小异,这里做一下简单对比。 语法对比 Java C# 访问修饰符 public 修饰类、接口、变量、方法。 对所有类可见。 修饰类、接口、变量、方法。 对所有类可见。 internal 无。 修饰类、接口、变量、方法。 类,接口的缺省访问修饰符。 同一个程序集的对象可见。 protected 子类可见。 子类可见。 private 类内部可见。 变量,方法的缺省访问修饰符 类内部可见。 default 类、接口、变量、方法的缺省修饰符。 同一包内可见。 无。 基本类型 基本类型,无方法可调用。 作为局部变量时,储存与栈。作为字段时,跟随于实例。 值类型,继承object,具有ToString()等方法。 作为局部变量时,储存与栈。作为字段时,跟随于实例。 布尔值 boolean bool 整形 short,int,long short,int,long 浮点数 float,double float,double 可空基本类型 例如:Integer是引用类型,Integer是int的包装类。 例如: int?其实是Nullable<int>的语法糖,而Nullable<int>依然是值类型。 布尔值 Boolean bool? 整形 Short,Integer,Long short?,int?,long? 浮点数 Float

c# 泛型学习(二)

纵然是瞬间 提交于 2020-03-17 08:30:43
使用泛型实现简单链表 首先创建一个泛型类LinkedListNode,该类型包含了一个属性Value,可以通过初始化进行赋值。还包含对上一个元素和下一个元素的引用。 public class LinkedListNode<T> { public LinkedListNode(T value) { this.value = value; } public T value { get; private set; } public LinkedListNode<T> Next { get; internal set; } public LinkedListNode<T> Prev { get; internal set; } } 然后创建一个LinkedList类型,该类包含了对链表首尾元素的引用。还包含一个添加元素到尾部的方法,以及GetEnumrator()方法,以便通过foreach进行遍历元素。        public class LinkedList<T> : IEnumerable<T>   { public LinkedListNode<T> First { get; private set; }       public LinkedListNode<T> Last { get; private set; } public LinkedListNode<T>

09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSet

馋奶兔 提交于 2020-03-16 20:38:28
09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSetimport com.fly.bean.Student; public class Demo1_Array { public static void main(String[] args) { Student[] arr = new Student[5]; //创建引用类型数组 arr[0] = new Student("张三", 23); arr[1] = new Student("李四", 24); arr[2] = new Student("王五", 25); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); /*Student [name=张三, age=23] Student [name=李四, age=24] Student [name=王五, age=25] null null*/ } } } 集合框架: 集合的由来 * 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给 我们提供了集合类,能存储任意对象,长度是可以改变的