- PR -

型定義のみが異なる複数のクラス(C#)

投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2003-07-23 22:32
みなさんありがとうございます。
この会議室は貴重な情報源で助かっています。
まさか、メモリ上でコンパイルするとは!
しかし、本当にツワモノ揃いですね。
わたしも昔VAX Fortranで同じことしたことありますが…。



mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2003-07-23 23:52
こんばんは、meiです。

C#(というか、.NET)は、実行時にコンパイラ動かしたり、
ダイナミックにクラスを作ったりできたりと面白いですよね。
例えば、自作ツールのユーザマクロにC#を利用したりとか、
ゲーム用スクリプトに応用したりとか、色々使えそうです。

やりすぎるとリフレクション経由のInvokeばかりで、
可読性が悪くなってしまいますけど。

↓こんなヘルパークラスを作れば、ちょっとは読みやすくなるかな?

コード:
class Wrapper {
	private object _o;

	public Wrapper(object o) {
		_o = o;
	}

	public object Invoke(string name) {
		return this.Invoke(name, null);
	}

	public object Invoke(string name, params object[] args) {
		MethodInfo mi = _o.GetType().GetMethod(name);
		if (mi == null)
			return null;
		return mi.Invoke(_o, args);
	}
}



↓前の投稿であった関数の書き換え。

コード:
	static void ArrayTest(object arr, params object[] args) {
		Wrapper wrap = new Wrapper(arr);

		foreach(object o in args) 
			wrap.Invoke("Add", o);
						
		Console.WriteLine("Number  : " + wrap.Invoke("Number"));
		Console.WriteLine("Average : " + wrap.Invoke("Average"));
	}



でも、型チェック等が実行時になってしまうのがちょっと嫌ですね。

catsさんがlispと比較されていましたが、
アセンブリを自己増殖していくアプリなんか出来ると面白い(怖い?)ですね。

スキルアップ/キャリアアップ(JOB@IT)