泛型知识

int   -2147483648~2147483647    21亿

在继承中,子类拥有父类的一切属性和行为,而且任何父类出现的地方,都可以用子类来替代;可谓“长江后浪推前浪”啊

object是一切类的父类

泛型在编译的时候确定类型(延迟思想);

泛型:用一个方法,来满足不同类型的参数;泛型实际上是语法糖,由编译器提供功能;没有性能损失

泛型参数的个数可以随便定义

========================贴代码=====================================================

public class GenericClass//定义一个泛型类
{
public static void show<T>(T tParameter)//泛型是一个方法后<T> 括号里传参数
{
Console.WriteLine("这是{0},类型是{1}",tParameter,tParameter.GetType());
}

public static int Show<T, S>(string s,int t,int d)//泛型传的类型可以是多个T,S
{
int num = Convert.ToInt32(s);

return num + t + d;
}

public static void Add<T>(int i, string s, double d)
{
double dd = i + d;
Console.WriteLine("我是{0},我今年{1}岁",s,dd);
}

public static void ShowObject(object obj)//object 是所有类型的基类,但是在传入类型的时候,可能会牵扯到不同类型之间的装箱和拆箱,有性能损失;泛型没有装拆箱,没有性能损失
{
Console.WriteLine("这是{0},类型是{1}",obj,obj.GetType());
}

public static void ShowT<SPara>(SPara tparameter)//这个任何类型都可以用,只要传入类型,括号里的参数正确就ok
{
Console.WriteLine("这个是泛型类Show T,parameter={0},parameterType={1}",tparameter,tparameter.GetType());
}

public static void ShowTT<SPara,T,S>(SPara tparameter,T t,S s)//传入多个类型
{
Console.WriteLine("这个是泛型类ShowTT,parameter={0},parameterType={1},t={2},tType={3},s={4},sType={5}", tparameter, tparameter.GetType(),t,t.GetType(),s,s.GetType());
}
}

==========================================================================

public class GenericConstaint//定义泛型约束
{
//where后面意思是T不仅要是个class对象,还可以new对象(可以有无参数构造)
public static T Get<T>(T t) where T : class,new ()//必须是个引用类型,string class ....
{

//引用类型的默认值是null
T tt = new T();//约束加了new(),才能new出来

return default(T);
}

public static T GetQuery<T>(T t) where T : struct //必须是个值类型,
{//值类型的默认值不确定
return default(T);
}

public static void SayHi<T>(T t) where T:People//t必须是People类型或者people类型的子类
{
Console.WriteLine("ID:{0},Name:{1}",t.Id,t.name);
t.SayHi();
}
public interface ISaySometing
{
void SayHello();
}

}

public class People
{
public string name{set;get;}
public int Id { set; get; }

public void SayHi()
{
Console.WriteLine("上午好");
}
}

============================================================================

class Program
{

static void Main(string[] args)
{
GenericClass.show<DateTime>(DateTime.Now);

int num= GenericClass.Show<string,string>("1", 1, 1);
Console.WriteLine(num);
//在泛型的单个类型的时候,<T>是传参数的类型;当要传入多个参数的时候,括号里可以有多个参数
GenericClass.Add<int>(4, "zhu", 1.0);
//object 是所有类型的父类

GenericClass.ShowObject("132");//ShowObject方法可以传入各种类型~~~string
GenericClass.ShowObject(1231);//ShowObject方法可以传入各种类型~~~int
GenericClass.ShowObject(DateTime.Now.Year);//ShowObject方法可以传入各种类型~~~DateTime

GenericClass.ShowT<string>("朱凯宾");// public static void ShowT<SPara>(SPara tparameter)只要传入相对应的T
GenericClass.ShowT<DateTime>(DateTime.Now);
GenericClass.ShowTT<DateTime,int,string >(DateTime.Now,100,"猪八戒");

Console.WriteLine("**********泛型约束****************");
//泛型约束声明后,类型参数必须满足约束
//GenericConstaint.Get<int>(3);// 这样会报错,泛型约束where是class,class是引用类型,int是值类型
// GenericConstaint.Get<string>("132");//string是引用类型,因为约束加了new(), 但是string类型是没有无参数构造的,所有会报错
GenericConstaint.GetQuery<int>(123);//值类型
//DateTime 是个结构体,不是引用类型
GenericConstaint.GetQuery<DateTime>(DateTime.Now);

People p = new People()
{
Id = 1,
name = "我是people"

};
GenericConstaint.SayHi<People>(p);

Console.ReadLine();

//用泛型没有装箱和拆箱,所以没有性能损失
//用object类型的时候会有拆箱和装箱~~~~~有性能损失

}
}

时间: 2024-10-05 05:04:46

泛型知识的相关文章

Java泛型知识学习

一.泛型出现的原因 首先,我们先看一个例子,如下: public class ListErr { public static void main(String[] args) { //创建一个只想保存字符串的List集合 List strList = new ArrayList(); strList.add("Hello World"); strList.add("Good Morning"); strList.add("你好"); //&quo

泛型学习由浅入深

第一章:根据具体的需求得出结果: 需求为:通过编写单独的方法在控制台同时输出    int iValue=123,long lValue=123123 的类型. 第一种方法:单独调用方法并输出 (明确类型前提下) class Program { static void Main(string[] args) { Console.WriteLine("开始学习!!!"); int iValue = 123; long lValue = 123123; MethodShow.ShowInt

认识Collection 与 泛型

主要内容 Collection集合 迭代器 增强for 泛型 Collection集合 集合到底是什么呢? 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值.集合存储的都是对象.而且对象的类型可以不 一致.在开发中一般当对象多的时候,使用集合进行存储. 1.2 集合框架 JAVASE提供了满足各种需求的API,在使用这些API前,先了解其继承与接口

java基础(18):集合、Iterator迭代器、增强for循环、泛型

1. 集合 1.1 集合介绍 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的.集合中存储的元素必须是引用类型数据 1.2 ArrayList集合存储元素 练习一:ArrayList集合存储5个int类型元素 public static void main(String[] args) { ArrayLi

Swift 方法的多面性 (转)

下面引自 objc.io 第16期 http://objccn.io/issue-16-3/ Swift 方法的多面性 虽然 Objective-C 的语法相对于其他编程语言来说写法有点奇怪,但是当你真正使用的时候它的语法还是相当的简单.下面有一些例子: + (void)mySimpleMethod { // 类方法 // 无参数 // 无返回值 } - (NSString *)myMethodNameWithParameter1:(NSString *)param1 parameter2:(N

[AaronYang]C#人爱学不学[4]

本文章不适合入门,只适合有一定基础的人看.我更相信知识细节见高低,我是从4.0开始学的,终于有时间系统的学习C#5.0,是5.0中的知识,会特殊标记下.但写的内容也可能含有其他版本framework的知识,也是为了方便自己更好的记忆C#知识.文章内容都是自己总结,无抄袭,如果你觉得文章档次太低,请大牛绕道 --Aaronyang的博客(www.ayjs.net) 1. 泛型-是C#的泛型 1.1 性能方面比非泛型好点,比如拆箱装箱的问题.个人感觉代码可读性更好吧.还有就是 写代码可能可以写出很精

Android探索之基于okHttp打造自己的网络请求(三)

前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? 关于Json解析: 本文的Json解析采用阿里巴巴的FastJson 解析,也可以采用Gson解析,两者之间的对比请参考文章Android之json解析(FastJson Gson 对比)(http://www.cnblogs.com/whoislcj/p/5468420.html). 关于泛型: 本文将采用json统一泛型解析,阅读本文之前请

C#泛型方法解析

C#2.0引入了泛型这个特性,由于泛型的引入,在一定程度上极大的增强了C#的生命力,可以完成C#1.0时需要编写复杂代码才可以完成的一些功能.但是作为开发者,对于泛型可谓是又爱又恨,爱的是其强大的功能,以及该特性带来的效率的提升,恨的是泛型在复杂的时候,会呈现相当复杂的语法结构.这种复杂不仅是对于初学者,对于一些有开发经验的.NET开发者,也是一个不那么容易掌握的特性. 接下来我们来了解一下C#2.0加入的特性:泛型. 一.泛型的基本特性概述: 在实际项目开发中,任何API只要将object作为

40_自定义泛型方法及其应用

java的泛型不同于C++的模板方法那么强大.java的泛型只停留在编译阶段,编译通过后泛型特征被擦除,主要因为保证jvm的效率.   用泛型知识,写一个交换数组元素的方法(此方法只适合于引用类型数组!因为int[]不会自动转为Integer[]!)   private static <T> void swap(T[] a,int i,int j){ T tmp=a[i]; a[i]=a[j]; a[j]=tmp; } String[] arr=new String[]{"123&q