現在仕事ではUnityを使っております。
といっても私は途中参加、及びヘルプであります。
なのでシステム部分の作りは分かっていなかったのでいろいろ見ていたのですが、C#の便利さを垣間見ます。
System.Reflectionを使ったメソッド呼び出しです。
XMLファイルでレイアウト情報を定義してそれをXMLDocumentを使って解析、
解析して作ったオブジェクトは定義された位置に描画されますがボタンオブジェクトなどがタッチされたときのコールバックを文字列で指定できるわけです。
レイアウトにはコールバックするオブジェクトの参照を渡し、レイアウトでイベントが発生したらそのオブジェクトの保持しているコールバック関数を文字列指定で実行。
なければ呼ばれないだけであれば呼ばれる仕組みなので非常に柔軟。
シーン遷移も文字列から行える、レイアウトのパラメータにもアクションがあった後の次シーンへの値を持てるようなのでシーン遷移もUI制御も楽チン
スクリプトエンジンではよくある手法ですがC#でもこんなことができたなんて!
まだまだ勉強することはたくさんでありまする
C#の面白い機能
Re: C#の面白い機能
>ISLeさん
おお、やっぱりJavaにもリフレクションあるんですね。
そういえばAndroidでもアクティビティの起動を文字列から行っていたことがありましたが
あれも似たようなものなのでしょうかね
おお、やっぱりJavaにもリフレクションあるんですね。
そういえばAndroidでもアクティビティの起動を文字列から行っていたことがありましたが
あれも似たようなものなのでしょうかね
Re: C#の面白い機能
>naohiro19さん
まだ私自身ちらっと見ただけなので頭に入っているわけではないのです。
そのうち覚えたらサンプルソースも付けて書こうかなとは思っています
まだ私自身ちらっと見ただけなので頭に入っているわけではないのです。
そのうち覚えたらサンプルソースも付けて書こうかなとは思っています
Re: C#の面白い機能
.NET 1.0の時代からデータバインディングは裏でリフレクションが走ってますね。
.NET 4まではLINQの式木からMethodInfoを得てプロパティ名を得る黒魔術コードがあったりしました。
# .NET 4.5のCallerMemberNameAttributeの出現で不要になりましたが。
リフレクション自体は重いので,MethodInfoからActionとかFuncとかのデリゲートを作成して,それをキャッシュして使った方がよいかと。
Unityが.NET Frameworkのどのレベルのライブラリを持っているかはわかりませんが。
.NET 4まではLINQの式木からMethodInfoを得てプロパティ名を得る黒魔術コードがあったりしました。
# .NET 4.5のCallerMemberNameAttributeの出現で不要になりましたが。
リフレクション自体は重いので,MethodInfoからActionとかFuncとかのデリゲートを作成して,それをキャッシュして使った方がよいかと。
Unityが.NET Frameworkのどのレベルのライブラリを持っているかはわかりませんが。
Re: C#の面白い機能
>YuOさん
リフレクションってそんなに古くからあったのですね。
あまり使ったことをまとめたサイトも多くないので最近のものかとばかり思っていました。。。
Unityの場合はたしか去年までは4.0までサポートされていたはずですが、最近はまた変わったのかもしれません。
リフレクションってそんなに古くからあったのですね。
あまり使ったことをまとめたサイトも多くないので最近のものかとばかり思っていました。。。
Unityの場合はたしか去年までは4.0までサポートされていたはずですが、最近はまた変わったのかもしれません。