如何声明泛型类的实例变量?

时间:2019-06-06 15:14:26

标签: c# generics

我有这个通用类:

public abstract class FilterPage<T> where T : IResponse 
{
     protected List<T> apiResults;
     public abstract List<T> Post();
}

从FilterPage继承的此类:

public class ExportImportPage : FilterPage<DemandExportReport>
{
     public override List<DemandExportReport> Post()
     {
            return apiResults = API.Post<List<DemandExportReport>>(FilterReqtUrl);
     }
}

public class DemandExportReport : IResponse
{
     ...
}

这里有我要进行初始化的类:

class TestClass
{
     public void Method1()
     {    
          FilterPage<DemandExportReport> myInst = new ExportImportPage();
     }

     public void Method2()
     {
         // I want to use myInst here.
     }

}

在TestClass中,如果我在myInst中将Method1()声明并初始化为FilterPage<DemandExportReport> myInst = new ExportImportPage(),则可以正常工作。我的问题是我在编译时不知道类型。我可以使用其他类型来代替DemandExportReport。我想在Method1()中初始化myInst,然后在其他方法中使用它,从而能够调用myInst.Post()。因此,我想不使用myInst来声明FilterPage<DemandExportReport> myInst;,因为我想使用FilterPage而不是DemandExportReport的几种类型?

注意:如果我创建一个非通用基类,假设BaseFilterPage,然后从其中继承FilterPage<t>,则可以声明一个{{1 }}实例类。问题在于,使用该变量,我无权访问BaseFilterPage方法。而且我无法将Post()声明移至Post(),因为它是通用方法。

0 个答案:

没有答案