マルチプラットフォーム用に開発するにはPCL(ポータブル・クラス・ライブラリ)を使うと良いらしいのだが情報が少ない気がするので、調べたことをメモしていく
それにしてもどこかに.netでこう書いてるものをPCLで書くには・・・みたいな書籍とかサイトとか無いものか。現在はstack
基本事項
プロジェクト生成時にポータブルライブラリを選択すればPCLで開発出来るようになる。すでに.netのプロジェクトで開発している場合にPCLにする方法はシラン。
.netで使ってる機能で使えなくなるものが多い。ファイルアクセスなんかがSystem.IOに入ってなくて出来なくなるので、NugetでPCL関連のライブラリを調べるのは必須
参考:Xamarinと、ポータブル・クラス・ライブラリ(PCL) - Build Insider
ファイルアクセス
PCL Storageを使うとよしなにやってくれる。Nugetから入れれば使えるようになる。
使えなくなるメソッドが結構ある
例えばSystem.Type.GetPropertyでPropertyInfoを取得しようとしても、メソッド無いので無理。この場合はSystem.Refrectionを使う
using System.Refrection
...
PropertyInfo p = typeof(Hoge).GetRuntimeProperty("property");
いちいちこういうのがあるので、結構大変。
TypeよりはなるべくTypeInfoを使うのが良さげ
PCLだとType.IsClassとか無いけどTypeInfo.IsClassはある。
assembly.DefinedTypes
.Where(x => x.IsClass && !x.IsAbstract && x.ImplementedInterfaces
.Any(i => i.GetTypeInfo().IsGenericType && i.GetGenericTypeDefinition() == commandHandlerOpenGenericType))
.Select(x => x.AsType())
みたいにして必要なインターフェースを持つクラスの型情報を取り出すとか出来る