3

我想使用来自常规.NET Framework 类库的源代码构建一个Windows Store类库。理想情况下,我不想修改原始源代码文件。

.NET Framework 库中的一些源代码文件中,静态成员用于在常规.NET Framework API 和.NET for Windows Store 应用程序API 中定义的类中,但其中只有 .NET 的子集。 NET Framework成员可用于Windows 应用商店

一个具体示例是System.IO.Path,其中GetFullPath 方法不适用于Windows 应用商店应用程序

在我的Windows 应用商店类库中合并此方法的替代项并让原始源代码调用此方法是相当简单的。我的问题是,有什么方法可以在不修改原始源代码文件的情况下做到这一点?

到目前为止,我还没有找到一个令人满意的解决方案来解决这个问题,但是我已经通过在另一个命名空间中实现例如方法来为我的Windows Store 类库解决了这个问题:Path.GetFullPath(string)

namespace WindowsStoreLib.System.IO {
    public static class Path {
        public static string GetFullPath(string path) { ... }
    }
}

然后在原始文件中添加预处理器指令:

#if NETFX_CORE
using Path = WindowsStoreLib.System.IO.Path;
#endif

是否有不需要修改原始源代码文件的替代解决方案?

4

3 回答 3

5

不,你不能,很简单。

当我在做跨平台的事情时,我倾向于编写一个#if针对不同平台具有不同实现(通过)的实用程序类——然后我的核心代码只调用实用程序类。

于 2013-03-22T12:46:54.807 回答
0

我最近一直在使用 Entity Framework 类做类似的事情,因为我需要将 2 个字段的特定输出添加为 1,并且每次更新时都会将其从 Designer.cs 中清除。但是它们不是静态类或静态方法,但应该使用相同的。

使用要扩展的类的名称创建一个新的类文件并使用部分限定符。

namespace WindowsStoreLib.System.IO {
    public partial static class Path {

       public static string GetFullPath(string path) { ... }
    }
}
于 2013-03-22T12:52:05.713 回答
0

正如 Marc 所说,预处理器指令似乎是唯一的解决方案。

但是当我阅读“静态类”和“现有类”时,首先想到的是“扩展方法”。如果您在代码所在的同一命名空间中为 Path 创建了扩展方法,会发生什么?

namespace MyNamespace.WhereMyCodeIs
{
    using System.IO;

    public static class ExtensionMethods
    {
        public static string GetFullPath(this Path pathObject, string path) 
        {
            // Implementation
        }
    }
}

我真的不确定这是否会奏效,但也许我们可以找到解决方法。

于 2013-03-22T13:11:29.960 回答