我最近发现可以在 C# 中“新建”一个接口,方法是用 装饰接口CoClassAttribute
以指定默认实现。
[ComImport, Guid("579A4F68-4E51-479A-A7AA-A4DDC4031F3F"), CoClass(typeof(FooImpl))]
public interface IFoo
{
void Bar();
}
public class FooImpl : IFoo
{
public void Bar() { }
}
...
// Constructs a FooImpl
IFoo foo = new IFoo();
我知道此功能的存在主要是为了支持 COM 互操作,但我想知道这是否是将接口与通用类库中的默认实现相关联的合理方法。
我有两个问题:
这样做有什么问题吗?我不是 COM 互操作方面的专家,我不知道这是否会对 POCO 产生任何负面影响。我没有运行任何主要测试,但我的示例的 IL 似乎没问题(一个正常的
newobj
指令FooImpl
而不是调用Type.GetTypeFromCLSID
andActivator.CreateInstance
)。即使这会顺利进行,是否还有其他原因(例如从 API 设计的角度)来避免这种情况?