【发布时间】:2011-11-11 13:09:32
【问题描述】:
我最近发现"new up" an interface in 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 似乎没问题(
FooImpl上的正常newobj指令,而不是对Type.GetTypeFromCLSID和Activator.CreateInstance的调用)。即使这会顺利进行,是否还有其他原因(例如从 API 设计的角度)可以避免这种情况?
【问题讨论】:
-
当您使用 Windows 特定的东西时,单声道实现的代码可能已损坏。
-
隔着紧闭的门都能听到wtfs的弹幕,应该是足够的理由了。您最好对其进行概要分析。
-
这真的能完成工厂做不到的事情吗?
标签: c# .net com api-design coclass