C# 如何在不修改它们的情况下使用具有相同属性的 2 个类

标签 c#

我在不同的命名空间中有两个相同的类:

namespace NP1 {
   public class AAA {
      public int A {get; set;}
      public int B {get; set;}
   }
}

namespace NP2 {
   public class AAA {
      public int A {get; set;}
      public int B {get; set;}
   }
}

它们在不同的文件中并且是自动生成的。我无法修改它们。

然后我还有另外两个文件:

using NP1;

public class N1Helper {
   (...)
   var sth = new AAA(A: some_value, B: some_other_value);
   (...)
}

using NP2;

public class N2Helper {
   (...)
   var sth = new AAA(A: some_value, B: some_other_value);
   (...)
}

这些助手的跳过部分是相同的。

我想简化这两个文件,只写一次代码。如果这些命名空间中的类将实现一个接口(interface),我可以做到。

有什么办法可以解决这个问题...

  • 使用泛型?
  • 告诉某处后验NP1.AAANP2.AAA 实现了一个公共(public)接口(interface)?类似于使用部分类并在后期附加接口(interface)信息,但我无法修改自动生成的文件。
  • ...?

最佳答案

Using generics

当然,把类型当作泛型参数就行了。您只是无法实际使用泛型参数,因为它没有实现任何接口(interface):

public class NHelper<TAAA> {
   (...)
   // this is not going to work
   // var sth = new TAAA(A: some_value, B: some_other_value);
   (...)
}

using partial classes [...] I can't modify the autogenerated files

部分类必须具有 partial 关键字,而您的自动生成类则不需要。所以没有。

...?

同样没有。 C# 不是像 C++ 这样的鸭子类型语言,它在每一层都是强类型语言。您得到的正是您编写的代码,如果您不想编写代码,您将一无所获。

修复自动生成的文件。

关于C# 如何在不修改它们的情况下使用具有相同属性的 2 个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73829138/

相关文章:

c# - 如何将文件文档发送到打印机并进行打印?

c# - 在单个查询中根据条件 ("where") 对数据进行分区?

c# - .NET 3.5 的 Lazy<T> 实现

c# - 开发 ISAPI 过滤器

c# - ASP.NET 中的 SqlDependency

将 DataRow 转换为 T 类型时,C# Int64Converter 无法从 System.Int64 错误转换

c# - 错误 : the property name 'firstname' specified for the type microsoft. crm.sdk.data.services 无效

c# - IIS 工作进程 : Which DLLs are loaded when different sites reference different versions?

c# - Windows窗体组织代码

c# - 如何正确使用C# 8.0 switch case