浅析泛型类接口定义

在使用泛型定义类的过程中遇到了不少问题,特记录如下,需要的朋友可以参考下
 

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

复制代码 代码如下:

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

时间: 2025-01-11 13:56:21

浅析泛型类接口定义的相关文章

Flex扩展HTTPService简化调用接口定义

Flex提供MXML来描述一个HTTPService,看上可以简化开发人员的工作,但实际上这种描 述HTTPService的方式很容易产生重复代码导致代码不好维护和扩展.数据交互接口唯一定义 对系统的维护非常有利,但基于AS定义HTTPService也是一件烦琐的事情:那如何做才能够达 到方便地定义接口呢. 接口定义 以下是定义一个登陆的 HTTPService public class ILogin extends HttpBase { public function ILogin(metho

Go语言接口定义与用法示例_Golang

本文实例讲述了Go语言接口定义与用法.分享给大家供大家参考,具体如下: 在Go中,接口interface其实和其他语言的接口意思也没什么区别.interface理解其为一种类型的规范或者约定.一种类型是不是"实现"了一个接口呢?就看这种类型是不是实现了接口中定义的所有方法. 1. 接口的定义和使用. 比如 复制代码 代码如下: type I interface{     Get() int     Put(int) } 这段话就定义了一个接口,它包含两个函数Get和Put 好了,我的一

Java中接口定义成员变量

在interface里面的变量都是public static final的.可以这样写:public static final int i=10或者int i=10. public interface MyInterface {  // 默认为public static int a = 10;  int a = 10; } public class MyTest {  public static void main(String[] args)  {   int a = MyInterface.

深入浅析Android接口回调机制_Android

在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致我们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话你是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误.那有什么好的方法去实现数据的线性传递呢?先介绍下回调机制原理. 回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数

.Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点

             除了使用.net里面提供的内置处理程序来处理我们的自定义节点外,我们还可以通过多种方法,来自己定义处理类处理我们的自定义节点,本文主要介绍通过实现IConfigurationSectionHandler接口的方式来实现自定义处理程序.            首先,我们先在配置文件里面写如下自定义节点:     <!-- 使用自定义节点和上面的自定义处理程序--> <mailServerGroup provider="www.baidu.com"

RJ45接口定义,RJ45与RJ11的区别详解

  RJ-45接口 RJ-45接口图例 RJ45是一个常用名称,指的是由IEC (60)603-7标准化, 使用由国际性的接插件标准定义的8个位置(8针)的模块化插孔或者插头.IEC (60)603-7也是ISO/IEC 11801国际通用综合布线标准的连接硬件的参考标准. RJ-45接口可用于连接RJ-45接头,适用于由双绞线构建的网络,这种端口是最常见的,一般来说以太网集线器都会提供这种端口.我们平常所讲的多少口路由器,就是指的具有多少个RJ-45端口. 因为在快速以太网中也主要采用双绞线作

浅析php接口操作interface关键字的用法及应用实例

接口是一种约束形式,其中只包括成员定义,不包含成员实现的内容.用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容. 我们可以通过interface来定义一个接口,就像定义一个标准的类一样,但其中定义所有的方法都是空的. 接口中定义的所有方法都必须是public,这是接口的特性. 实现   要实现一个接口,可以使用implements操作符.类中必须实现接口中定义的所有方法,否则会报一个fatal错误.如果要实现多个接口,可以用逗号来分隔多个接口的名称.

深入浅析Android接口回调机制

在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致我们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话你是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误.那有什么好的方法去实现数据的线性传递呢?先介绍下回调机制原理. 回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数

浅析javascript函数定义的几种区别

 本篇文章主要是对javascript函数定义的几种区别进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 javascript函数的定义   1:调用关键字function来构造,如: function distance(x1,x2,y1,y2) { var dx=x2-x1; var dy=y2-y1; return Math.sqrt(dx*dx+dy*dy); }   2:使用Function()构造函数 var f=new Function*"x","