【发布时间】:2011-05-09 20:26:19
【问题描述】:
(语言是 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 代码的情况下实现这一点? 也许有一些类似宏的功能或使用反射?
谢谢,
乌里·杰姆斯。
【问题讨论】:
-
您应该知道,当您将 valueType 作为接口引用时,valueType 每次都会被装箱。
标签: c# macros constraints generics