我最近發現可以通過裝飾與CoClassAttribute
的接口來指定默認實現"new up" an interface in C#。(ab)使用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-interop的專家,我不知道這是否會對POCO產生任何負面影響。我沒有進行任何主要測試,但是我的例子中的IL似乎沒問題(上的正常
newobj
指令,而不是調用Type.GetTypeFromCLSID
和Activator.CreateInstance
)。即使這樣做會順利進行,是否還有其他原因(比如從API設計的角度來看)來避免這種情況?
因爲您正在使用Windows特定的東西,所以代碼可能會打破單聲道實現。 – Femaref
我可以通過關門聽到wtfs的攻擊,應該有足夠的理由。你最好介紹一下。 –
這實際上是否完成了工廠無法做到的任何事情? –