我有一个具有多个实用功能的类。该类编译为dll,然后在用户编辑器中使用,其中有3个操作版本。
这三个版本(我们称之为A,B和C)使用的核心库在三个版本中略有不同,但命名方式与文件完全相同,并且具有重叠的函数和类。
为了编译我的dll并能够与编辑器交互,我选择了一个版本的核心库,并在我的解决方案中引用它。 为了方便与其他版本的交叉兼容性,我选择了核心库的B版本。
现在我遇到的问题:核心库中的一些函数/类属性在一个版本中缺少其他版本,但我需要能够解决这些函数和类并“决定”(在运行时?)要使用哪个属性,以解决用户正在运行的类/函数的特定于版本的属性。 每个版本的编辑器都会使用其版本公开全局定义。
Simple example:
Version A Class_A
property_1
property_2
Version B Class_A identical to version A
Version C Class_A
property_1
property_3 <= property 2 has disappeared, I must use this as per new api specifications
我已经尝试使用这些定义,但我意识到这些是在我构建时被“消耗”的,并且由于我引用了编辑器的B版本,我的DLL被“洗礼”,好像用户编辑器是B,无论以后哪个编辑器都使用DLL。
Simple example:
... //some code in my library
public void UseClassA() {
Class_A newclassA = new Class_A();
newclassA.property_1 = "x";
#if VERSION_A || VERSION_B
newclassA.property_2 = "y";
#endif
#if VERSION_C
newclassA.property_3 = "y";
#endif
}
^^^ Version C users will get an error when calling this function, since my dll is built with reference to VERSION_B's core dll.
作为替代方案,我使用了反射,但由于我不得不在运行时进行“属性检查”而不是“版本检查”,因此感觉很脏。
所以问题是,是否可以在我的代码中维护指令,以便在运行时而不是在构建期间考虑它们?我有点明白这不是指令的工作原理,所以我希望有一种替代或方法来达到预期的效果。