标题:接口返回值的问题
只看楼主
belin2000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:975
专家分:194
注 册:2004-6-2
结帖率:0
已结贴  问题点数:20 回复次数:2 
接口返回值的问题
在开发一个缓存类的时候,发现了一个接口返回的问题,百思不能解决,求帮助:

接口:

 public interface IDataHelper
    {
        /// <summary>
        /// 根据条件从缓存库中获取数据(数据库是返回IList&lt;T&gt; / 文件是返回string)
        /// </summary>
        /// <param name="NamespaceClassnameAndPara">保存在缓存库中的key</param>
        /// <param name="ht">缓存库</param>
        /// <param name="forbase">如果库中不存在,使用这些条件获取数据(类型:FileForBase/DataForBase)</param>
        /// <returns></returns>
        object GetItem(IHelperPara NamespaceClassnameAndPara, Hashtable ht, object forbase);
}

GetItem 返回 IList<T> 或者string类型,IList<T>的数据是从数据库返回;string 是从文件返回;

数据库类 的继承接口的代码:

public object GetItem(IHelperPara NamespaceClassnameAndPara, Hashtable ht, object forbase)
        {
            ICache cache = new ITA.Base.EntLib.Caching.Cache(ht);
            //如果数据不存在,使用委托获取数据。
            // cache.DataDoing(new DataDelegate(GetDataByDataBase<T>), forbase)使用委托获取数据
            CacheItem item = cache.GetItem(NamespaceClassnameAndPara, cache.DataDoing(new DataDelegate(GetDataByDataBase<T>), forbase));
            return item.Data;
        }
        IList<T> GetDataByDataBase<T>(object forbase) where T:new()
        {
            //doing;
        }
文件类 的继承接口的代码:
public object GetItem(IHelperPara NamespaceClassnameAndPara, System.Collections.Hashtable ht, object forbase)
        {

            ICache cache = new ITA.Base.EntLib.Caching.Cache(ht);
//如果数据不存在,使用委托获取数据。
 // cache.DataDoing(new DataDelegate(GetDataByDataBase), forbase)使用委托获取数据

            CacheItem item = cache.GetItem(NamespaceClassnameAndPara, cache.DataDoing(new DataDelegate(GetDataByDataBase), forbase));
            return item.Data;
        }
object GetDataByDataBase(object forbase)
        {
//doing;
        }

现在问题就是出现在 数据库类的方法 GetItem 代码中委托事件 GetDataByDataBase 中返回的 IList<T> 。T不知道如何定义和处理。
搜索更多相关主题的帖子: 地址栏 public interface 广州 
2012-09-24 18:49
jeanine123
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:65
专家分:192
注 册:2011-9-17
得分:20 
文章中用到的是泛型类,GetDataByDataBase这个泛型类使用了构造函数约束。
泛型类构造函数类型约束:
new()构造函数约束
new()构造函数约束允许开发人员实例化一个泛型类型的对象。
一般情况下,我们无法创建一个泛型类型参数的实例。然而,new()约束改变了这种情况,他要求类型参数必须提供一个无参数的构造函数。
在使用new()约束时,可以通过调用该无参构造函数来创建对象。
基本形式: where T : new()
使用new()约束时应注意两点:
(1)它可以与其他约束一起使用,但是必须位于约束列表的末端。
(2)new()仅允许开发人员使用无参构造函数来构造一个对象,即使同时存在其他的构造函数。换句话说,不允许给类型参数的构造函数传递实参。
2012-09-27 08:52
belin2000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:975
专家分:194
注 册:2004-6-2
得分:0 
楼上不明白哦,
问题是GetItem  我的返回值是 obj;
obj 可以是ilist<T>和string

也就是说
数据库类 的继承接口的代码:

public object GetItem(IHelperPara NamespaceClassnameAndPara, Hashtable ht, object forbase)
{}
返回的是IList<T>,但这个方法没有定义T的。该方法是接口方法。

59ita点com(我就爱TA)
2012-09-28 21:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-382025-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.358191 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved