C#之泛型
泛型是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#之泛型的更多相关文章
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- C#4.0泛型的协变,逆变深入剖析
C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)
建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- C#泛型详解(转)
初步理解泛型: http://www.cnblogs.com/wilber2013/p/4291435.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber ...
- C# 泛型
C# 泛型 1.定义泛型类 在类定义中包含尖括号语法,即可创建泛型类: class MyGenericClass<T> { //Add code } 其中T可以遵循C#命名规则的任意字符. ...
- java8中lambda表达式的应用,以及一些泛型相关
语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...
- java 泛型
1.Student stu =tool.getObj();右边得到的是Object类型,需要向下转型,强转换. 2. 3. 4.泛型方法不能被静态修饰这样写 5.如果想定义定义静态泛型方法,只能这样写 ...
- Java泛型的历史
为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...
随机推荐
- 删除SQL server 实例
在网上找到下面几种方法,本人使用的是第一种,很实用. 1.删除 SQL Server 的特定实例若要删除 SQL Server 的某个特定实例,请按照以下步骤操作: 找到并删除%drive%:\\Pr ...
- Linq常用操作
http://www.cnblogs.com/knowledgesea/p/3897665.html
- bug_ _ 应用汇==常见错误列表
应用汇的安装功能是基于安卓系统的adb开发的,adb的安装过程分为传输与安装两步.在出错后,助手会在右下角弹出详细的错误编号及建议. 下面列举出几种常见的错误及解决方法. Q1:无效的安装包,安装包已 ...
- iCheck表单美化插件使用方法详解(含参数、事件等)
iCheck 特色: 1.在不同浏览器(包括ie6+)和设备上都有相同的表现 - 包括 桌面和移动设备 2.支持触摸设备 - iOS.Android.BlackBerry.Windows Phon ...
- Java中Filter、Servlet、Listener的学习
1.Filter的功能filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个reques ...
- bootstrap-响应式工具和打印样式
响应式工具: <div class="container"> <!-- 针对不同的宽度 展示或隐藏相关内容 visible-lg-block 显示 hidden- ...
- js实现加减乘除
/** ** 除法函数,用来得到精确的除法结果 ** 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. ** 调用:accDiv(arg ...
- Java基础-布局
- oracle10g如何配置客户端
http://jingyan.baidu.com/article/4d58d541c108939dd4e9c0f5.html 不行的话: 对tnsnames.ora进行编辑:ORCL = (DESCR ...
- 20145305 《Java程序设计》实验五
实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器,结对编程一人负责客户端,一 ...