C#の面白い機能

アバター
せんちゃ
記事: 50
登録日時: 14年前
住所: 江別市東野幌町
連絡を取る:

C#の面白い機能

投稿記事 by せんちゃ » 12年前

現在仕事ではUnityを使っております。
といっても私は途中参加、及びヘルプであります。

なのでシステム部分の作りは分かっていなかったのでいろいろ見ていたのですが、C#の便利さを垣間見ます。
System.Reflectionを使ったメソッド呼び出しです。

XMLファイルでレイアウト情報を定義してそれをXMLDocumentを使って解析、
解析して作ったオブジェクトは定義された位置に描画されますがボタンオブジェクトなどがタッチされたときのコールバックを文字列で指定できるわけです。
レイアウトにはコールバックするオブジェクトの参照を渡し、レイアウトでイベントが発生したらそのオブジェクトの保持しているコールバック関数を文字列指定で実行。
なければ呼ばれないだけであれば呼ばれる仕組みなので非常に柔軟。
シーン遷移も文字列から行える、レイアウトのパラメータにもアクションがあった後の次シーンへの値を持てるようなのでシーン遷移もUI制御も楽チン


スクリプトエンジンではよくある手法ですがC#でもこんなことができたなんて!
まだまだ勉強することはたくさんでありまする

ISLe
記事: 2650
登録日時: 14年前

Re: C#の面白い機能

投稿記事 by ISLe » 12年前

難読化ツール通したら動かなくなるなんてことがあるので注意。
リフレクションはJavaにもあります。

naohiro19
記事: 256
登録日時: 14年前

Re: C#の面白い機能

投稿記事 by naohiro19 » 12年前

サンプルプログラムを書いたほうがいいですよ

アバター
せんちゃ
記事: 50
登録日時: 14年前
住所: 江別市東野幌町
連絡を取る:

Re: C#の面白い機能

投稿記事 by せんちゃ » 12年前

>ISLeさん
おお、やっぱりJavaにもリフレクションあるんですね。
そういえばAndroidでもアクティビティの起動を文字列から行っていたことがありましたが
あれも似たようなものなのでしょうかね

アバター
せんちゃ
記事: 50
登録日時: 14年前
住所: 江別市東野幌町
連絡を取る:

Re: C#の面白い機能

投稿記事 by せんちゃ » 12年前

>naohiro19さん
まだ私自身ちらっと見ただけなので頭に入っているわけではないのです。
そのうち覚えたらサンプルソースも付けて書こうかなとは思っています

YuO
記事: 947
登録日時: 14年前

Re: C#の面白い機能

投稿記事 by YuO » 12年前

.NET 1.0の時代からデータバインディングは裏でリフレクションが走ってますね。
.NET 4まではLINQの式木からMethodInfoを得てプロパティ名を得る黒魔術コードがあったりしました。
# .NET 4.5のCallerMemberNameAttributeの出現で不要になりましたが。

リフレクション自体は重いので,MethodInfoからActionとかFuncとかのデリゲートを作成して,それをキャッシュして使った方がよいかと。
Unityが.NET Frameworkのどのレベルのライブラリを持っているかはわかりませんが。

アバター
せんちゃ
記事: 50
登録日時: 14年前
住所: 江別市東野幌町
連絡を取る:

Re: C#の面白い機能

投稿記事 by せんちゃ » 12年前

>YuOさん
リフレクションってそんなに古くからあったのですね。
あまり使ったことをまとめたサイトも多くないので最近のものかとばかり思っていました。。。
Unityの場合はたしか去年までは4.0までサポートされていたはずですが、最近はまた変わったのかもしれません。