3

通常の.NETFrameworkクラスライブラリのソースコードを使用して、WindowsStoreクラスライブラリを構築したいと思います。理想的には、元のソースコードファイルを変更したくありません。

.NET Frameworkライブラリの一部のソースコードファイルでは、静的メンバーは、通常の.NETFrameworkAPIと.NETforWindows Store Apps APIの両方で定義されているクラスから使用されます 。のサブセットのみが使用されます。 NET Frameworkメンバーは、Windowsストアで利用できます。

具体的な例の1つは、 System.IO.Pathです。この場合、GetFullPathメソッドWindowsストアアプリでは使用できません。

このメソッドの代わりをWindowsStoreクラスライブラリに組み込み、代わりに元のソースコードでこのメソッドを呼び出すのはかなり簡単です。私の質問は、元のソースコードファイルを変更せずにこれを行う方法はありますか?

これまでのところ、この問題に対する満足のいく解決策を見つけることはできませんでしたが、たとえば別の名前空間にメソッドを実装することで、 WindowsStoreクラスライブラリの問題を解決しました。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

マークが言ったように、プリプロセッサディレクティブが唯一の解決策のようです。

しかし、「静的クラス」と「既存のクラス」を読むと、最初に頭に浮かぶのは「拡張メソッド」です。コードと同じ名前空間に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 に答える
0

2つのフィールドの特定の出力を1として追加する必要があり、更新のたびにdesigner.csからそれが消去されたため、最近EntityFrameworkクラスでこのようなことを行っています。ただし、それらは静的クラスまたは静的メソッドではありませんでしたが、同じように機能するはずです。

拡張するクラスの名前で新しいクラスファイルを作成し、部分修飾子を使用します。

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

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