获取对通用对象<t>的引用

时间:2017-01-24 22:32:09

标签: c# generics generic-list generic-collections

我的对象定义如下:

public class ModelList<T> : ModelBase, IModelList<T>, IModelList 
where T : IModelListItem, new()
{
    public void Method1()
    {
    // do work here!
    }
}

public class Object1 : ModelListItem
{
}

public class Object2 : ModelListItem
{
}

public class Objects1: ModelList<Object1>, IModelList
{
}

public class Objects2: ModelList<Object2>, IModelList
{
}

在远处代码的某个地方,我有一个方法将接收Objects1或Objects2的集合对象。有没有办法从这里调用Method1?

private void DoSomething(object O)
{
    // O can be either Objects1 or Objects2
    O.Method1();
}

2 个答案:

答案 0 :(得分:5)

  

有没有办法从这里调用Method1?

有:远离你的远程方法:

 private void DoSomething<T>(ModelList<T> o)
   where T : IModelListItem, new()
 {
   o.Method1();
 }

答案 1 :(得分:2)

由于该方法根本不依赖于类型,因此您可以将Method1()添加到IModelList并将其传递给该函数。

public interface IModelList 
{
    void Method1();
}

一样使用
private void DoSomething(IModelList  o)
{
    // o can be either Objects1 or Objects2 or anything else that implments IModelList
    o.Method1();
}