//父类的申明
public abstract class Persistence<T>
{
   public abstract void AddItem(T item);
}
//子类的申明
public class OrdersDAL : Persistence<Orders>
{
public void AddItem(Orders item)
{
//....具体实现
}
}
那么我在用父类的时候必须Persistence<order> p = new OrdersDAL ()
但我想要的是Persistence p = new OrdersDAL()的效果,我不想再父类上指明泛型类型因为子类具体用哪个类型不确定,请问我该怎么做呢?

解决方案 »

  1.   

    题外话:你子类方法少写个override 这是编译通不过的错误正文回答:
    考虑使用方法泛型,
    class A{
      public static T Get<T>()where T:A,new()
      {
            return new T();
      }
    }class A1:A{}//use Orders
    class A2:A{}//use Product//...
    class Test {
        void App() {
            A a = A.Get<A1>();//return A1 instance
            A a2 = A.Get<A2>();//return A2 instance
        }
    }
      

  2.   

    恩恩,可以这样定义类吗?public  class Persistence<T>
    {
      }
      

  3.   

    用泛型方法有个问题
    子类的
    public void AddItem(Orders item)
    {
    //....具体实现
    }
    方法中的参数就变成T item
    但在子类的实现中就无法把T强转成order
      

  4.   

    public interface IInterface
    {
    }
    public abstract class Persistence<T>:IInterface
    {
       public abstract void AddItem(T item);
    }
      

  5.   

    没明白这个的IInterface有啥用?
    他里面又没有AddItem方法
      

  6.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;using Persistence = WindowsApplication184.Persistence<WindowsApplication184.Orders>;namespace WindowsApplication184
    {
        //父类的申明
        public abstract class Persistence<T>
        {
            public abstract void AddItem(T item);
        }    //子类的申明
        public class OrdersDAL : Persistence<Orders>
        {
            override public void AddItem(Orders item)
            {
                //....具体实现
            }
        }    public class Orders
        {
        }
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                Persistence p = new OrdersDAL();
            }
        }
    }
      

  7.   

    如果只是想求一个通用转换规则的可以用如下方法实现  OrdersDAL[] list=new OrdersDAL[1];
      OrdersDAL a = new OrdersDAL();
      list[0] = a;
      Persistence<Orders>  b = (Persistence<Orders>)list.Cast<Persistence<string>>().First();这里稍微借用了一下集合以便使用cast<T>的功能如果想更简便的转换的话,请 找一下 sp1234大神的那篇啥 “给对象插上linq的翅膀”
      

  8.   

    哦,写错了一句话Persistence<Orders>  b = (Persistence<Orders>)list.Cast<Persistence<Orders>>().First();