私は最近、インターフェイスを で修飾してデフォルトの実装を指定することにより、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 相互運用機能をサポートするために存在することは承知していますが、これが汎用クラス ライブラリの既定の実装にインターフェイスを関連付ける合理的な方法であるかどうか疑問に思っていました。
2 つの質問があります。
これを行う際に落とし穴はありますか?私は COM 相互運用の専門家ではないので、これが POCO に悪影響を与えるかどうかはわかりません。私は主要なテストを実行していませんが、私の例の IL は問題ないようです ( andの呼び出しではなく、通常の
newobj
命令です)。FooImpl
Type.GetTypeFromCLSID
Activator.CreateInstance
これがスムーズに機能する場合でも、これを回避する他の理由 (API 設計の観点から言う) はありますか?