私は最近、"new up" an interface in C#にインターフェイスをデコレートして、CoClassAttribute
でデフォルトの実装を指定することができることを発見しました。CoClassAttributeを使用して(ab)インターフェイスのデフォルトの実装を提供することはできますか?
[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-相互運用をサポートするために主に存在していることを承知しているが、これは一般的なクラス・ライブラリのデフォルトの実装とのインターフェイスを関連付けるための合理的な方法だろうかと思いまして。
- がこれを行うと任意の落とし穴があります:
私は2つの質問がありますか?私はCOM-interopの専門家ではなく、これがPOCOに何らかの悪影響を及ぼすかどうかはわかりません。私は大きなテストは行っていませんが、私の例ではILはと
Activator.CreateInstance
を呼び出すのではなく、newobj
命令(FooImpl
)であるようです。 これがスムーズに機能する場合でも、これを避けるために他の理由がありますか(API設計の観点から)?
Windows固有のものを使用しているため、モノの実装ではコードが壊れている可能性があります。 – Femaref
私は閉鎖されたドアを介してwtfsの弾幕を聞くことができる、十分な理由があるはずです。あなたはそれをよりよくプロファイルする方がよいでしょう。 –
これは実際に工場ができなかったことを達成していますか? –