重写存在于一个程序集版本中但不存在于 C# .NET 3.5 中的方法
Overriding a method that exists in one version of an assembly but not another in C# .NET 3.5
我有一个 class 是第三方库提供的一个子class。我的class需要兼容这个第三方库的多个版本。因此,针对此库的开发是在我们保持兼容性的最旧版本的库上完成的。
较新版本的库有一个虚拟 属性,我需要在我的子 class 中覆盖它。这个虚拟 属性 在旧版本的库中不存在。
有没有什么方法可以在我的子class 中覆盖虚拟 属性 而不会破坏与旧版本库的兼容性?
简单地创建同名的 属性 是行不通的,因为对象在运行时被转换为基础 class(因此虚拟 属性 将使用提供的内容在基地 class,不是我的子 class)。我们不能忽略虚拟 属性,因为它会影响新版本库的运行时操作。
您可以在第三方库周围使用包装器 class 并注入不同风格的包装器以用于不同版本的第三方库。
例如,对于 LibClass
,您将拥有 IWrapperLibClass
,其中将具有当前使用的 public 方法。您当前的实现应该取决于 IWrapperLibClass
并且基于 3rd Party 库的版本,您必须找出注入 WrapperLibClassFlavourA
的 Flavor 的方法
我有一个 class 是第三方库提供的一个子class。我的class需要兼容这个第三方库的多个版本。因此,针对此库的开发是在我们保持兼容性的最旧版本的库上完成的。
较新版本的库有一个虚拟 属性,我需要在我的子 class 中覆盖它。这个虚拟 属性 在旧版本的库中不存在。
有没有什么方法可以在我的子class 中覆盖虚拟 属性 而不会破坏与旧版本库的兼容性?
简单地创建同名的 属性 是行不通的,因为对象在运行时被转换为基础 class(因此虚拟 属性 将使用提供的内容在基地 class,不是我的子 class)。我们不能忽略虚拟 属性,因为它会影响新版本库的运行时操作。
您可以在第三方库周围使用包装器 class 并注入不同风格的包装器以用于不同版本的第三方库。
例如,对于 LibClass
,您将拥有 IWrapperLibClass
,其中将具有当前使用的 public 方法。您当前的实现应该取决于 IWrapperLibClass
并且基于 3rd Party 库的版本,您必须找出注入 WrapperLibClassFlavourA