泛型是C# 2.0版本才有的语言特性,是具有参数类型占位符的类、结构、接口和方法。这些占位符是类、结构、接口和方法所存储或使用的一个或多个占位符。简单来说,就是变量类型的参数化。

以下是详细demo:

    #region 泛型的约束

    /// <summary>
/// 1.0基类约束
/// </summary>
/// <typeparam name="T">约束成了将来调用的时候只能传入Pig本身或者其子类</typeparam>
public class House<T> where T:Pig
{ } /// <summary>
/// 2.0 引用类型约束
/// </summary>
/// <typeparam name="T">约束成了将来调用的时候只能传入引用类型参数</typeparam>
public class House1<T> where T:class
{ } /// <summary>
/// 3.0值类型约束
/// </summary>
/// <typeparam name="T">约束成了将来调用的时候只能传入值类型参数</typeparam>
public class House2<T> where T:struct
{ } /// <summary>
/// 4.0接口约束
/// </summary>
/// <typeparam name="T">约束成了将来调用的时候只能传入Ipig本身或者Ipig的实现类型参数</typeparam>
public class House3<T>where T:IPig
{ } /// <summary>
/// 5.0构造器约束
/// </summary>
/// <typeparam name="T">约束成了将来调用的时候只能传入 构造器参数</typeparam>
public class House4<T>where T:class ,new()
{
T t;
public House4()
{
t = new T();
}
} /// <summary>
/// 多个参数约束
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
public class House6<T, V>
where T : class
where V : struct
{ } #endregion #region 泛型的继承
public class DogHouse6 : House6<Dog, int>
{ } public class DogHouse61<X, Y> : House6<X, Y>
where X : class
where Y : struct
{ } public class DogHouse62<X, Y> : House6<Pig, decimal>
{ } #endregion #region 泛型方法
/// <summary>
/// 泛型方法 有下列任何一项 均构成重载:
/// 1.泛型方法的参数个数不一致
/// 2.参数类型不一致
/// 3.类型占位符个数不一致
///
///
/// 泛型方法的类型占位符个数一致,但名字不一样 不会构成重载
/// </summary>
public class UserInfoBll
{
public T Get<T>(T t)
{
return t;
} public string GetName<T>(T t, int num)
{
T tt = t;
return "某一个参数类型为泛型,返回值为string";
} public string GetName<T, V>(T t, int num)
{
T tt = t;
return "返回值";
} public T GetName<T>(string str)
{
return default(T);
} public string GetName<T>(T t)
{
T tt = t;
return "返回值";
}
} public class UserInfoBll1<T>
{
T tt;
public T GetT(T t)
{
tt = t;
return tt;
}
}
#endregion #region 泛型方法的重写
public abstract class Father
{
public abstract T SayHi<T, U>(T t, U u) where U : T; // U必须继承于T public abstract T Think<T>(T t) where T : Pig;
} /// <summary>
/// 子类重写父类中的抽象泛型方法的时候,不需要单独再将类型占位符 重新添加约束
/// </summary>
public class Son : Father
{
public override T SayHi<T, U>(T t, U u)
{
return t;
} public override T Think<T>(T t)
{
return default(T);
}
}
#endregion

使用泛型进行缓存管理:

  public   class CacheMgr<T>
{
public static T Get(string cacheKey)
{
return (T)HttpRuntime.Cache[cacheKey];
} public static void Add<TT>(string cacheKey,TT value)
{
HttpRuntime.Cache[cacheKey] = value;
}
}

C#之泛型的更多相关文章

  1. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  2. .NET面试题系列[8] - 泛型

    “可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...

  3. C#4.0泛型的协变,逆变深入剖析

    C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...

  4. 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)

    建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...

  5. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  6. C#泛型详解(转)

    初步理解泛型: http://www.cnblogs.com/wilber2013/p/4291435.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber ...

  7. C# 泛型

    C# 泛型 1.定义泛型类 在类定义中包含尖括号语法,即可创建泛型类: class MyGenericClass<T> { //Add code } 其中T可以遵循C#命名规则的任意字符. ...

  8. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  9. java 泛型

    1.Student stu =tool.getObj();右边得到的是Object类型,需要向下转型,强转换. 2. 3. 4.泛型方法不能被静态修饰这样写 5.如果想定义定义静态泛型方法,只能这样写 ...

  10. Java泛型的历史

    为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...

随机推荐

  1. CentOS of MySQL command

    1.本地连接数据库 [root@iZ253lxv4i0Z mysql]# mysql -u root -pEnter password: or: [root@iZ253lxv4i0Z mysql]# ...

  2. 手把手教你玩转Git分布式版本控制系统!

    目录 Git诞生历史 Git环境准备 Git安装部署 Git常用命令 Git基本操作 Git管理分支结构 Git管理标签 GitLab安装部署 GitHub托管服务 Git客户端工具 1 Git诞生历 ...

  3. DBA_Oracle冷备份和热备份的处理(概念)

    2014-07-27 Created By BaoXinjian

  4. OAF_EO系列4 - Create详解和实现(案例)

    2014-06-02 Created By BaoXinjian

  5. NeHe OpenGL教程 第三十三课:TGA文件

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. andriod_入门一

    [小技巧] 1.背景图片文件名不能以数字开头,必须以字母开头. 2.如果按钮被背景图被遮住,可以在relativelayout里拖动控件,把背景拖到最上方: [异常] 1. 在用LinearLayou ...

  7. STM32中断控制及优先级设置

    M3用8bits而STM32用高四位来表示抢占和子优先级:bit=1表示抢占:bit=0表示非抢占即子优先级:所以共有5中方案分组: 分组 Bit7 Bit6 Bit5 Bit4 说明: 第0组   ...

  8. HTML5 - 使用<video>播放视频

    ,下面是一个播放视频的最简单样例 (controls属性告诉浏览器要有基本播放控件) <video src="hangge.mp4" controls></vid ...

  9. 适配6 、6P 来源互联网

    iPhone 6 6P出现后,如何将一份设计稿支持多个尺寸? 如何只出一套iOS平台设计稿?随着苹果发布两种新尺寸的大屏iPhone 6,下面三款iPhone尺寸和分辨率数据就知道屏幕有多杂了. 现在 ...

  10. rubymine配置 rspec

    If you go in Run > Edit Configurations... And select All Specs in <Your Project> you'll see ...