- - PR -
動的にメンバ変数作成
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-14 14:48
いつもお世話になっています。
ネットで検索してもヒットしなかったので、出来ないのではないかと考えていますが、 クラスの変数(メンバ変数)を動的に作成することは出来ますか。 | ||||||||
|
投稿日時: 2007-09-14 14:51
動的ってことは実行時ってことだよね。 何のためにそんなことをしたいの? そんなこともしてもコンパイルの段階で検知できなければおいしいところはあまりないと思うけど? チェックすらできないし。 可変リストでも使って出し入れするのとあんまり変わらんような。 | ||||||||
|
投稿日時: 2007-09-14 15:11
できると思いますよ。 System.Reflection.Emit名前空間辺りを見てみてください。 でも、それらの追加した変数は通常の変数へのアクセスのようにアクセスすることはできませんよね。コンパイル時点ですでにソースコードは書き終わっているわけですから。 なぜそうしたいのか興味がありますね。 Dictionary<string, object>でも使った方がましってことはないですか? | ||||||||
|
投稿日時: 2007-09-14 15:26
一郎さん、ぶさいくろうさん レスありがとうございます。
という回答に驚きなのですが、 まず、何をしたいかをお伝えしたいと思います。 現在、VB.NET(2005)でシステムを開発している段階なのですが、 関係するテーブルの列名をメモリに格納し、 各種プロパティ(Visible、Enable、データ更新可・不可) そのために、テーブルの列名を直打ちするのではなく、 動的に取得したいので、そのような質問をさせていただきました。 答えになっているでしょうか。 | ||||||||
|
投稿日時: 2007-09-14 15:47
よくわかんないけどその列名を取得するには変数名なりキー名なりを結局タイプせねばならんと思うんだけど・・・ だから実行時だと意味がないって結論になるんじゃないかなと思うんだけど。 この解釈であってるか不安。 あってるとすればこれそもそも型付DataSetでいいんじゃ・・・ | ||||||||
|
投稿日時: 2007-09-14 15:47
できますが、アセンブリ・モジュール・クラス・メンバの全てを動的に作成する必要があります。静的に作成したクラスに対して動的にフィールドを作成することはできません。(メソッドならできますが。)
動的に作成するのではなく、型付DataSetを使用するのではダメですか? _________________ C#と諸々 | ||||||||
|
投稿日時: 2007-09-14 15:48
そういうことなら、 IDataReader.GetSchemaTable メソッド http://msdn2.microsoft.com/ja-jp/library/system.data.idatareader.getschematable(VS.80).aspx で取得したテーブルの内容を用いて実現出来ませんでしょうか。 | ||||||||
|
投稿日時: 2007-09-14 15:51
これは、実行時に列の名前をstringの配列などでメモリ上に保持しているということですよね。
これは、ソースコードに固定で列名を使ったプロパティを書くのではなく、実行時に列名の数だけプロパティを持つ型を定義したいということですよね。 何に驚かれているのか分かりませんが、System.Reflection.Emitはまさにストライクじゃあないんですか?(実は使ったことはないんですけど) それとも、動的ということではなくて、ソースコードの自動生成とかの話ですか? データベースのテーブル定義を見てソースコードを自動で生成してくれるツールとか。 |