none
泛型的使用 RRS feed

  • 问题

  • public interface IDBOperator<TModel, TKey>
    {
       
    bool Exists(TKey id);
        TKey Add(TModel model);
       
    bool Update(TModel model);
       
    bool Delete(TKey id);
        List
    <TModel> GetList();
    }

    比如这样定义的一个接口,然后实现类里面如何实现他的方法,原来的代码是这样

    public partial class Customer:IDBOperator
     {
      private readonly jm.DAL.Customer dal=new jm.DAL.Customer();
      public Customer()
      {}
      public bool Exists(long CustomerID)
      {
       return dal.Exists(CustomerID);
      }
      public long Add(jm.Model.Customer model)
      {
       return dal.Add(model);
      }
    }

    如果接口里面用了泛型以后,应该怎么改代码,在页面上调用这个接口的方法时又怎么调用,因为对泛型不是很了解,谢谢啊

    2011年6月9日 6:31

答案

  • 谢谢,那在Web页面我应该怎么调用这个方法,原来的我是

    private readonly IDBOperator<jm.Model.Customer> icustomer = OperatorFactory.CreateDBOperator("customer");

    OperatorFactory.cs代码
    namespace jm.Factory
    {
        public class OperatorFactory
        {
            private static readonly string AssemblyPath = ConfigurationManager.AppSettings["BLL"];
            //通过反射生成ilogin的接口实例
            public static object CreateObject(string AssemblyPath, string ClassNamespace)
            {
                object objType = null;
                if (objType == null)
                {
                    try
                    {
                        //objType = Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace);//反射创建
                        objType = Assembly.LoadFile(System.Web.HttpContext.Current.Server.MapPath("~/bin/BLL.dll")).CreateInstance(ClassNamespace);
                    }
                    catch
                    { }
                }
                return objType;
            }
            public static jm.Interface.IDBOperator<T> CreateDBOperator(string classname)      //这里的这个T怎么办
            {
                string ClassNamespace = AssemblyPath + "."+classname;
                object objType = CreateObject(AssemblyPath, ClassNamespace);
                return (jm.Interface.IDBOperator)objType;
            }
        }
    }

    2011年6月9日 7:24

全部回复

  • 继承接口要给出泛型的两个参数 
    public  class Customer:IDBOperator<userModel,int>
        {
            #region IDBOperator<userModel,int> 成员
            public bool Exists(int id)
            {
                throw new NotImplementedException();
            }
            public int Add(userModel model)
            {
                throw new NotImplementedException();
            }
            public bool Update(userModel model)
            {
                throw new NotImplementedException();
            }
            public bool Delete(int id)
            {
                throw new NotImplementedException();
            }
            public List<userModel> GetList()
            {
                throw new NotImplementedException();
            }

    Ellis_Wong
    2011年6月9日 6:52
  • 如果更灵活点可以这样

    class Customer<T,K> : IDBOperator<T,K>



    山西.net俱乐部
    2011年6月9日 7:01
    版主
  • 谢谢,那在Web页面我应该怎么调用这个方法,原来的我是

    private readonly IDBOperator<jm.Model.Customer> icustomer = OperatorFactory.CreateDBOperator("customer");

    OperatorFactory.cs代码
    namespace jm.Factory
    {
        public class OperatorFactory
        {
            private static readonly string AssemblyPath = ConfigurationManager.AppSettings["BLL"];
            //通过反射生成ilogin的接口实例
            public static object CreateObject(string AssemblyPath, string ClassNamespace)
            {
                object objType = null;
                if (objType == null)
                {
                    try
                    {
                        //objType = Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace);//反射创建
                        objType = Assembly.LoadFile(System.Web.HttpContext.Current.Server.MapPath("~/bin/BLL.dll")).CreateInstance(ClassNamespace);
                    }
                    catch
                    { }
                }
                return objType;
            }
            public static jm.Interface.IDBOperator<T> CreateDBOperator(string classname)      //这里的这个T怎么办
            {
                string ClassNamespace = AssemblyPath + "."+classname;
                object objType = CreateObject(AssemblyPath, ClassNamespace);
                return (jm.Interface.IDBOperator)objType;
            }
        }
    }

    2011年6月9日 7:24