C# 如何最好地从两个不同的DLL填充几乎相同类的两个不同对象,而不必维护两个不同的对象?

C# 如何最好地从两个不同的DLL填充几乎相同类的两个不同对象,而不必维护两个不同的对象?,c#,.net,dll,C#,.net,Dll,我有两个同名的类(我们称之为ClassX),在相同的层次结构下,在两个独立的DLL中。这两个DLL都来自第三方。Dll1.ClassX和Dll2.ClassX在这两个DLL中也位于同一命名空间下。让DLL为Dll1和Dll2。现在,让我们考虑两个对象,Obja和Objb,同一个类。我的应用程序必须要么只创建objA,要么只创建objB,或者两者都创建,这取决于我们从数据库返回的特定条件。我使用外部别名来解决应用程序中类引用中的歧义。现在情况来了 用例1或用例2(创建单个对象,objA或objB)

我有两个同名的类(我们称之为ClassX),在相同的层次结构下,在两个独立的DLL中。这两个DLL都来自第三方。Dll1.ClassX和Dll2.ClassX在这两个DLL中也位于同一命名空间下。让DLL为Dll1和Dll2。现在,让我们考虑两个对象,Obja和Objb,同一个类。我的应用程序必须要么只创建objA,要么只创建objB,或者两者都创建,这取决于我们从数据库返回的特定条件。我使用外部别名来解决应用程序中类引用中的歧义。现在情况来了


用例1或用例2(创建单个对象,objA或objB)很容易。棘手的部分是我必须在应用程序中同时创建objA和objB。因为只有objA和objB的某些属性不同,所以蛮力方法是创建两个不同的对象,然后在代码流经我的应用程序的同时填充它们。然而,这意味着我必须重新编写大多数对象创建代码,以适应“额外”对象。听起来很乏味。我想知道是否有更好的方法来实现这一点。

使用一个新的公共接口和两个适配器类来统一它们,这两个适配器类使用适当的“real”类的自有实例来实现接口。

尝试使用反射API@Thakur:您能详细说明一下吗?创建对象的副本(克隆它)典型的方法是序列化现有的并反序列化新的。您也可以使用相同的方法,例如json+自定义绑定器就可以了。@Sinatr:Dll2对象版本objB是向后兼容的,但也就是说,我将objA序列化为a.xml,然后将其从a.xml反序列化为objB,这样就行了。但是,并不是所有的属性都能正确填充。我知道这可以根据具体情况加以纠正,但这应该是我的最后手段。还有什么我可以试试的吗?其次,objB的一些方法签名与objA的不同。所以,这也是我必须考虑的一点。“但是,并不是所有属性都得到了适当的填充”-通常它们的默认值应该是适当的(如果xml中缺少)。如果背后有逻辑,那么您就无法避免运行它。仍然反序列化将使您免于手动分配。“objB的某些方法签名是不同的”-方法签名与状态(属性和字段值)无关,您能否详细说明这是一个什么问题?最好是给出一个简短的代码示例,说明这些对象的外观以及现在如何解决问题。其他解决方案可能不存在。当然,我们会尝试一下。谢谢