当接口<t>

时间:2015-06-04 15:13:07

标签: c# generics

难倒在这一个上。我有这个方法:

private static List<IBiscuitTransformer> GetBiscuitTransformers()
 {
     var type = typeof(IBiscuitTransformer);
     var transformers = AppDomain.CurrentDomain.GetAssemblies()
         .SelectMany(s => s.GetTypes().Where(c => !c.IsInterface))
         .Where(p => type.IsAssignableFrom(p))
         .Select(c => (IBiscuitTransformer)Activator.CreateInstance(c))
         .ToList();

     return transformers;
 }

这很有效。我有几个BiscuitTransformer的实现,而且都是饼干善良。

然而,问题在于我希望IBiscuitTransformer拥有一个以List<T> biscuitBarrelBiscuits作为参数的方法。这似乎迫使我IBiscuitTransformer进入IBiscuitsTransformer<T>,这是我真正不想要的,但可能是不可行的。

一旦我这样做,我就不知道如何修改上面的代码,因此我可以创建实现IBiscuitTransformer<T>的所有类的实例。可能是因为我不知道T?或者我无法弄清楚语法。但是我不需要知道T来创建一个实例,它只是我想要在T中进行的方法调用。只有对象TransformBiscuit(List<T> biscuitBarrelBiscuits)上的方法才是通用的,而不是类本身,所以应该可以用Activator创建它的实例。

但我无法弄清楚如何做到这一点,或者它是否可能。有什么想法吗?

为了解释我想要做什么,我有一堆饼干变形金刚,它们可以吸收饼干并对其进行改造。每种类型的饼干都有一个,我将它们通过反射加载到一个数组中,这样当饼干进来时我可以选择使用哪一个。变换器都有一个共同的界面,上面有一个TransformBiscuit方法,但因为他们收集了不同类型的饼干的集合,它必须是一个列表,以便他们都能够使用相同的界面。

我不确定我是否能够弄清楚这个概念,或者我是否从根本上做错了。

1 个答案:

答案 0 :(得分:2)

使方法通用。

void TransformBiscuit<T>(List<T> biscuitBarrelBiscuits)

这假设BiscuitTransformer的单个实例能够转换您传入的任何饼干顶部。