6

アセンブリの依存関係について理解したい微妙な点があります。次のようなカスタムラッパーを介して SharpDX を使用するプロジェクトがあります。

SharpDX.dll <- Wrapper.dll <- Project.dll

Wrapper.dll には、次のような型があります。

public class D3DWrapperTypeA {
    //public D3DWrapperTypeA(SharpDX.Device device) {
    //    
    //}

    public D3DWrapperTypeA(IntPtr devicePointer) {
         SharpDX.Device device = new SharpDX.Device(devicePointer);
         // etc
    }
}

このクラスでは、コメント化されたコンストラクターのコメントを外すと、Project.dll はコンストラクターを使用しない場合でも、SharpDX.dll を参照する必要があります。

ただし、次のような別のラッパー タイプもあります。

public class WrapperTypeB {
    public SharpDX.Device GetDevice(int adapter) {
        // etc
    }

    public IntPtr GetDevicePointer(int adapter) {
        return GetDevice(adapter).NativePointer;
    }
}

ここで、SharpDX オブジェクトを返す GetDevice メソッドを実際に使用しない限り、Project.dll は SharpDX.dll を参照する必要はありません。

SharpDX 型のパラメーターを受け取る未使用のコンストラクターでも SharpDX への依存が発生するのに、SharpDX 型のパラメーターを返す未使用のメソッドは依存しないのはなぜですか?

4

2 に答える 2

6

依存関係があることをどのように知っているかはかなり不明です。ただし、コンパイル時の依存関係があります。実行時の依存関係を説明するのははるかに困難です。

コンパイル時の依存関係が存在するのは、C# コンパイラが、コンストラクターのオーバーロードをすべて認識して正しいものを呼び出せるようにする必要があるためです。SharpDX.dll のメタデータをロードできない場合、SharpDX.Device について何も知らない場合は、そうすることができません。

これは、SharpDX.Device を返すメソッドの場合ではありません。戻り値の型は、どのオーバーロードが正しいものであるかを判断するために使用されることはありません。

于 2013-08-28T15:59:57.980 に答える