(语言是VS 2008中的c#)

我有以下问题:
有许多结构(由第3方提供)都实现了具有相同签名的某些方法。
我想用实现特定接口的包装器类包装这些结构,以便可以用统一的方式处理这些类。
例:

interface AnInterface
{
    void DoSomething();
}

struct Struct1
{
    public void DoSomething();
}

class Struct1Wrapper : AnInterface
{
    private Struct1 m_struct;
    public override void DoSomething() // AnInterface implementation
    {
        m_struct.DoSomething();
    }
}


请注意,Struct1 DoSomething方法是具体的,而Struct1Wrapper通过接口实现该方法以便于处理。

Struct2等也是如此-StructXWrapper的代码是相同的,除了Struct1被StructX代替

为了避免代码重复,我尝试使用泛型:

class GenericStructWrapper<AStruct> : AnInterface
{
    private AStruct m_struct;

    public override void DoSomething() // AnInterface implementation
    {
        m_struct.DoSomething();
    }
}


但这是行不通的,因为编译器没有关于AStruct DoSomething()方法的概念。

还有其他想法如何在不重复Struct1Wrapper代码的情况下实现这一点吗?
也许有一些类似宏的功能或反射的使用?

谢谢,

Ury Jamshy。

最佳答案

您可以在采用该方法的类构造函数中采用Action<AStruct>

然后,您可以创建实例,例如new GenericStructWrapper<Struct1>(s => s.DoSomething())

07-24 14:08