根据框架版本实现接口

本文关键字:实现 接口 版本 框架 | 更新日期: 2023-09-27 18:09:16

我正在编写一个库,如果可能的话,我想要一个类来实现和使用IReadOnlyList<T>。然而,这个接口只能从框架版本4.5开始使用,我不想仅仅因为这个接口就被绑定到那个版本。

是否有一种方法可以自动编译两个版本的库,一个为4.5(将实现接口,并可能有一些其他功能),另一个为3.5?

作为一个例子,我正在寻找类似MSBuild配置的东西,它说"在两个[或更多]版本中编译这个库",然后为每个版本指定不同的选项,如定义符号,框架,引用等。

如果这是可能的,它实际上可以解决我一直遇到的许多其他类似的问题。

根据框架版本实现接口

你可以使用编译器指令,例如

#if NET45
//specific code for .NET 4.5
#endif

然后创建两个项目,每个版本一个,使用项目链接器维护单个代码库。在. net 4.5项目中,您可以在构建时指定NET45变量。这样,#if块中的代码将只在其中一个版本中使用。

您可以创建两个版本的项目文件,针对不同的框架版本。在这种情况下,我将把所有的项目文件放在现有的项目目录中。

在每个项目中,您将定义一个符号来指示框架版本(根据需要),例如DOTNET45。你可以在属性-构建-条件编译符号

那么你可以使用#if指令:

class MyClass<T> : IList<T>
#if DOTNET45
    , IReadOnlyList<T>
#endif
{
    // Your usual code
    #if DOTNET45
    // IReadOnlyList implementation
    #endif
}
然而,这可能会变得混乱。另外,你可以使用分部类:
partial class MyClass<T>
{
}
#if DOTNET45
partial class MyClass<T> : IReadOnlyList<int>
{
    // IReadOnlyList implementation
}
#endif

显然,部分类也可以划分为文件,所以你可以完全不使用#if,只在项目的。net 4.5版本中包含这个部分类文件。