浅析泛型类接口定义

定义最基本的泛型类如下:


代码如下:

public abstract class GetDataBase<T> :IHttpHandler, IRequiresSessionState {
 protected abstract T GetModel(HttpContext context);
 protected abstract IList<T> GetList(int pageSize, int pageIndex, string where, string sortname, string sortorder, out int total); 
    protected JsonFlexiGridData GetFlexiGridData(IList<T> list, int pageIndex, int pageSize, int total, string colkey, string colsinf)
    {
        PagedList<T> pl = new PagedList<T>();
        pl.PageIndex = pageIndex - 1;
        pl.PageSize = pageSize;
        pl.DataList = new List<T>();
        pl.DataList.AddRange(list);
        pl.Total = total;
        JsonFlexiGridData data = JsonFlexiGridData.ConvertFromPagedList(pl, colkey, colsinf.Split(','));
        return data;  
    }

}

其实最简单的只需要添加<T>,就表示泛型类了,可在使用的过程中 pl.DataList = new List<T>();总是提示错误,编译不通过,说是必须是类才可以,于是修改如下


代码如下:

public abstract class GetDataBase<T> :IHttpHandler, IRequiresSessionState where T : class{

1设定泛型基类或者要求
关键的一句where T : class就表示类型是类,当然如果需要T是其他类型,例如接口,或者是继承与某个类,也是同样的修改方法
例如泛型接口继承于泛型接口IObjectWithKey<TK>,


代码如下:

public interface IDeviceAgent<TK, TCk> : IObjectWithKey<TK>, IDisposable{

例如泛型接口IContainer的第一类型TV必须继承与接口IObjectWithKey<TK>


代码如下:

public interface IContainer<TK, TV> where TV:IObjectWithKey<TK>{

2泛型有多个类型


代码如下:

public interface IContainer<TK, TV> where TV:IObjectWithKey<TK>{

就有多个类型,当然,在具体的类中,这两种类型可以相同,也可以不同
其实也就是在一对<>中放置多个类型,有几个类型,就放几个参数,名称没有什么特殊要求
3泛型如果有多个类型约束,例如都要求是类,如何处理


代码如下:

public abstract class GetDataBase<TListItem, TModel> : IHttpHandler, IRequiresSessionState
    where TListItem : class
    where TModel : class

(0)

相关推荐

  • 浅谈c# 泛型类的应用

    泛型类泛型类封装不是特定于具体数据类型的操作. 泛型类最常用于集合,如链接列表.哈希表.堆栈.队列.树等. 像从集合中添加和移除项这样的操作都以大体上相同的方式执行,与所存储数据的类型无关.对大多集合类的操作,推荐使用 .NET Framework 类库中所提供的类.(1)泛型类可以继承具体类.封闭式构造.开放式构造基类. 复制代码 代码如下: class BaseNode { }class BaseNodeGeneric<T> { }// 继承具体类class NodeConcrete<

  • 自定义的Troop<T>泛型类( c++, java和c#)的实现代码

    Troop<T>是一个泛型列表操作类,适用于非高性能和非大数据量的要求.包括了:取值get,赋值set,追加append,插入insert,清除remove,进队enqueue,出队dequeue,交换swap,滚动roll,进栈push,出栈pop等日常操作. //for more information, please access http://www.one-lab.net using System; using System.Collections.Generic; using Sy

  • 浅谈java中定义泛型类和定义泛型方法的写法

    1.方法中的泛型 public static <T> T backSerializable(Class<T> clazz , String path ,String fileName){ FileInputStream fis = null; ObjectInputStream ois = null; Object obj = null; try { fis = new FileInputStream(path + fileName); ois = new ObjectInputS

  • Java泛型类型通配符和C#对比分析

    c#的泛型没有类型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,只是语法糖,在编译器编译的时候都转换成object类型 类型通配符在java中表示的是泛型类型的父类 public void test(List<Object> c) { for(int i = 0;i < c.size();i++) { System.out.println(c.get(i)); } } //创建一个List<String>对象 List<String&g

  • c# 泛型类型参数与约束的深入分析

    泛型类型参数简介在定义泛型类型和泛型方法时,常用到泛型类型参数,泛型类型参数是在实例化泛型时指定类型的占位符.泛型类型参数放在"<>"内.泛型类型参数命名建议:(1)当泛型类型参数为单个字母时,建议用T表示.(2)当泛型类型参数用单词定义时,建议在单词前加T. 复制代码 代码如下: private void PromptName<T>(T t) {}private void PromptName<Tuser>(Tuser user){} 泛型类型参数

  • 深入解析C#中的泛型类与泛型接口

    泛型类 泛型类封装不是特定于具体数据类型的操作.泛型类最常用于集合,如链接列表.哈希表.堆栈.队列.树等.像从集合中添加和移除项这样的操作都以大体上相同的方式执行,与所存储数据的类型无关. 对于大多数需要集合类的方案,推荐的方法是使用 .NET Framework 类库中所提供的类. 一般情况下,创建泛型类的过程为:从一个现有的具体类开始,逐一将每个类型更改为类型参数,直至达到通用化和可用性的最佳平衡.创建您自己的泛型类时,需要特别注意以下事项: 将哪些类型通用化为类型参数. 通常,能够参数化的

  • C# 泛型类(函数)的实例化小例子

    泛型可以用于类,也可以用于函数.如 泛型类: 复制代码 代码如下: public class MyClass<T> {     public T MyElement { get; set; } } 泛型函数: 复制代码 代码如下: public T ReturnElement<T>() {     throw new NotImplementedException(); } 但是当需要对MyElement进行实例化的时候,却不能使用new(),只要添加如下代码即可进行实例化了: 泛

  • c#自定义泛型类的实现

    闲来无事,自己研究了泛型类的简单的使用,where表示泛型约束,表示泛型类型中的参数只能是car类型,IEnumerable是一个接口,一个集合要支持FOREAch遍历,必须实现IEnumerable接口 复制代码 代码如下: public class Car    {        public string PetName;        public int Speed;        public Car(string name, int currentSpeed)        {  

  • 介绍C# 泛型类在使用中约束

    首先看一下泛型的基本语法 访问修饰符 返回类型 泛型方法名 <T>(T 参数) 1):无法在泛型方法内部给任何 T 类型创建实例的对象,因为在泛型方法内部不知道传进来的对象有哪些构造函数2):约束是对内部的!(对于泛型方法)约束也是会被继承的! 3):给泛型类 加类型(引用类型,值类型)的约束:where T:class,new ( ) 遇到的问题:在写MongodbHelper类的时候,为了能处理多种类别,所以如下定义了该类: 复制代码 代码如下: public class MongodbH

  • Spring中初始化泛型类的方法实例

    首先来看下在 Java 中对于泛型类型,比如这样简单的类定义 class Processor<T> {} 如果直接初始化时要指定具体类型的话,我们可以这么写 Processor<String> processor = new Processor<>(); //Java 7 及以上版本 Spring 对基本泛型的初始化 如果我们要用 Spring 容器来初始化这个类,比如给上面那个类加个 @Named 注解 @Named class Processor<T>

随机推荐