Istnieje subtelny punkt dotyczący zależności złożeniowych, które chciałbym zrozumieć. Mam projekt, który wykorzystuje SharpDX dzięki niestandardowym owijki tak:Dlaczego nieużywany konstruktor powoduje w tym przypadku zależność od złożenia?
SharpDX.dll < - Wrapper.dll < - Project.dll
W Wrapper.dll to rodzaj takich jak:
public class D3DWrapperTypeA {
//public D3DWrapperTypeA(SharpDX.Device device) {
//
//}
public D3DWrapperTypeA(IntPtr devicePointer) {
SharpDX.Device device = new SharpDX.Device(devicePointer);
// etc
}
}
W tej klasie, jeśli odkomentuję skomentowany konstruktor, Project.dll musi odwoływać się do SharpDX.dll, nawet jeśli nie używa konstruktora.
Jednak mam również inny typ otoki tak:
public class WrapperTypeB {
public SharpDX.Device GetDevice(int adapter) {
// etc
}
public IntPtr GetDevicePointer(int adapter) {
return GetDevice(adapter).NativePointer;
}
}
i tu tak długo, jak nie faktycznie użyć metody GetDevice zwracającą obiekt SharpDX, Project.dll nie potrzebuje odwołać się do SharpDX.dll.
Dlaczego nawet nieużywany konstruktor pobierający parametr typu SharpDX powoduje zależność od SharpDX, a nieużywana metoda zwracająca parametr typu SharpDX nie?
Czy to nie dlatego, że zależności konstruktorów są potrzebne w czasie kompilacji, skoro zależności metod są potrzebne tylko w środowisku wykonawczym? Trochę przypuszczenia, jeśli jestem uczciwy! – Liam