泛型是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. 109. Convert Sorted List to Binary Search Tree

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  2. 黄聪:jquery.confirm弹出确认消息

    1.插件介绍 该确认框的默认样式如: 1.1.插件默认参数 // 默认参数 $.confirm.defaults = { // 样式 css: "http://static.qianduan ...

  3. (C#) Parse xml 时, 返回的node值总是null。

    网上查了一下,原因在于要parse的Xml文件本身包含了一些namespace,这些需要被添加进去. http://msdn.microsoft.com/zh-cn/library/system.xm ...

  4. c# 对话框交换数据

    本例是一个管理联系人信息的小程序,程序有两个窗体,一个主窗体,在listview控件中显示联系人信息列表,一个对话框窗体,用来显示和修改 某个联系人的信息.通过主窗体的菜单命令,可以打开对话框,并把主 ...

  5. DG_Oracle DataGuard Failover主备节点切换(案例)

    2014-03-09 Created By BaoXinjian Thanks and Regards

  6. silverlight 报 System.NullReferenceException 未将对象引用设置到对象的实例。

    在 Microsoft.Windows.Design.Platform.SilverlightMetadataContext.SilverlightXamlExtensionImplementatio ...

  7. JAVA 想让类无法new,可以使用private将类的构造函数改为私有的,这样new的时候就会报错了

    JAVA 想让类无法new,可以使用private将构造函数改为私有的,这样new的时候就会报错了 主要用于,静态工具类,静态类不需要new,直接使用   类名.静态方法  即可调用 class D{ ...

  8. android之location01

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <Linear ...

  9. jenkins参数化构建过程

    http://www.cnblogs.com/meitian/p/5492457.html 1,首先增加Jenkisn插件 https://wiki.jenkins-ci.org/display/JE ...

  10. angularJs中的隐藏和显示

    <!DOCTYPE html> <html ng-app="a2_12"> <head> <meta charset="utf- ...