SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

UWPアプリを書けばiOS/Android/Webでも動く!?
~Uno Platform:クロスプラットフォーム開発環境

UWPアプリ開発の最前線 第15回

  • X ポスト
  • このエントリーをはてなブックマークに追加

プラットフォーム依存のC#コード

 C#のコードをプラットフォームごとに切り分けるには、#ifディレクティブを使う方法と、パーシャルクラスを使う方法とがあります。

 プラットフォームごとのシンボルは、次のように定義されています。

  • UWP:NETFX_CORE
  • Android:__ANDROID__
  • iOS:__IOS__
  • WebAssembly:__WASM__

 「.Shared」プロジェクトの中では、上記のシンボルを使って#ifディレクティブで分岐できます。例えば、MainPageクラスに定義したメンバー変数Platformを、次のコードのようにしてプラットフォームごとに異なった値に初期化できます。なお、このメンバー変数Platformは、後ほどお見せする実行例でTextBlockにバインドしています。

#ifディレクティブの例(MainPage.xaml.cs
  public sealed partial class MainPage : Page
  {
    string Platform
#if NETFX_CORE
      = "UWP";
#elif __ANDROID__
      = "Android";
#elif __IOS__
      = "iOS";
#elif __WASM__
      = "WebAssembly";
#endif

 プラットフォーム依存コードが何行にも渡る長いものであった場合、#ifディレクティブではコードの見通しが悪くなります。そのようなときはパーシャルクラスを利用します。

 例えば、「.Shared」プロジェクトに、次のコードのようにSampleMessageクラスを作ったとします。このクラスはまだ不完全で、文字列定数PlatformNameの定義を追加する必要があります。

パーシャルクラスの例(.Shared/SampleMessage.cs
  internal partial class SampleMessage
  {
    internal static string GetString()
      => string.Format($"このプラットフォームは{PlatformName}です。");
  }

 次に、プロジェクトごとにパーシャルクラスのファイルを作って、そこに文字列定数PlatformNameの定義を記述します。ファイル名は「.Shared」プロジェクトに置いたファイルと同じでも構わないのですが、区別しやすいように違う名前にしておきます。例えば、「.iOS」プロジェクトに置くファイル名は「SampleMessage.iOS.cs」などとするとよいでしょう。

 「.iOS」プロジェクト用に文字列定数PlatformNameを定義したパーシャルクラスを、次のコードに示します。残りの3プロジェクトにも同様に作成し、それぞれの文字列定数を定義します。

パーシャルクラスの例(.iOS/SampleMessage.iOS.cs
  internal partial class SampleMessage
  {
    const string PlatformName = "iOS";
  }

 次の画像に実行例を示します。画面上方の色付き文字列のプラットフォーム名は、前述の#ifディレクティブによるもの。ボタンの下にある文字列は、パーシャルクラスのメソッドを呼び出したものです。

プラットフォーム依存コードの実行例
プラットフォーム依存コードの実行例

 なお、実際の開発では、この程度の文字列の使い分けならプロジェクトごとに文字列リソース(「Resources.resw」ファイル)を置くだけで済みます。上記のコードは、あくまでも説明用のサンプルということでご容赦ください。

次のページ
まとめ

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11795 2019/11/13 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング