- PR -

動的にメンバ変数作成

投稿者投稿内容
モンジ
ベテラン
会議室デビュー日: 2005/09/06
投稿数: 85
投稿日時: 2007-09-14 14:48
いつもお世話になっています。

ネットで検索してもヒットしなかったので、出来ないのではないかと考えていますが、
クラスの変数(メンバ変数)を動的に作成することは出来ますか。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-09-14 14:51
引用:

モンジさんの書き込み (2007-09-14 14:48) より:
いつもお世話になっています。

ネットで検索してもヒットしなかったので、出来ないのではないかと考えていますが、
クラスの変数(メンバ変数)を動的に作成することは出来ますか。


動的ってことは実行時ってことだよね。
何のためにそんなことをしたいの?
そんなこともしてもコンパイルの段階で検知できなければおいしいところはあまりないと思うけど?
チェックすらできないし。
可変リストでも使って出し入れするのとあんまり変わらんような。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-09-14 15:11
引用:

モンジさんの書き込み (2007-09-14 14:48) より:
ネットで検索してもヒットしなかったので、出来ないのではないかと考えていますが、


できると思いますよ。
System.Reflection.Emit名前空間辺りを見てみてください。

でも、それらの追加した変数は通常の変数へのアクセスのようにアクセスすることはできませんよね。コンパイル時点ですでにソースコードは書き終わっているわけですから。
なぜそうしたいのか興味がありますね。
Dictionary<string, object>でも使った方がましってことはないですか?
モンジ
ベテラン
会議室デビュー日: 2005/09/06
投稿数: 85
投稿日時: 2007-09-14 15:26
一郎さん、ぶさいくろうさん レスありがとうございます。

引用:
できると思いますよ。
System.Reflection.Emit名前空間辺りを見てみてください。



という回答に驚きなのですが、
まず、何をしたいかをお伝えしたいと思います。

現在、VB.NET(2005)でシステムを開発している段階なのですが、
関係するテーブルの列名をメモリに格納し、
各種プロパティ(Visible、Enable、データ更新可・不可)
そのために、テーブルの列名を直打ちするのではなく、
動的に取得したいので、そのような質問をさせていただきました。

答えになっているでしょうか。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-09-14 15:47
引用:

モンジさんの書き込み (2007-09-14 15:26) より:
そのために、テーブルの列名を直打ちするのではなく、
動的に取得したいので、そのような質問をさせていただきました。


よくわかんないけどその列名を取得するには変数名なりキー名なりを結局タイプせねばならんと思うんだけど・・・
だから実行時だと意味がないって結論になるんじゃないかなと思うんだけど。
この解釈であってるか不安。
あってるとすればこれそもそも型付DataSetでいいんじゃ・・・
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2007-09-14 15:47
引用:
クラスの変数(メンバ変数)を動的に作成することは出来ますか。



できますが、アセンブリ・モジュール・クラス・メンバの全てを動的に作成する必要があります。静的に作成したクラスに対して動的にフィールドを作成することはできません。(メソッドならできますが。)


引用:
現在、VB.NET(2005)でシステムを開発している段階なのですが、
関係するテーブルの列名をメモリに格納し、
各種プロパティ(Visible、Enable、データ更新可・不可)
そのために、テーブルの列名を直打ちするのではなく、
動的に取得したいので、そのような質問をさせていただきました。




動的に作成するのではなく、型付DataSetを使用するのではダメですか?

_________________
C#と諸々
IIJIMAS
ベテラン
会議室デビュー日: 2006/12/06
投稿数: 77
投稿日時: 2007-09-14 15:48
引用:

モンジさんの書き込み (2007-09-14 15:26) より:

まず、何をしたいかをお伝えしたいと思います。

現在、VB.NET(2005)でシステムを開発している段階なのですが、
関係するテーブルの列名をメモリに格納し、
各種プロパティ(Visible、Enable、データ更新可・不可)
そのために、テーブルの列名を直打ちするのではなく、
動的に取得したいので、そのような質問をさせていただきました。

答えになっているでしょうか。



そういうことなら、
IDataReader.GetSchemaTable メソッド
http://msdn2.microsoft.com/ja-jp/library/system.data.idatareader.getschematable(VS.80).aspx
で取得したテーブルの内容を用いて実現出来ませんでしょうか。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-09-14 15:51
引用:

モンジさんの書き込み (2007-09-14 15:26) より:
関係するテーブルの列名をメモリに格納し、


これは、実行時に列の名前をstringの配列などでメモリ上に保持しているということですよね。

引用:

モンジさんの書き込み (2007-09-14 15:26) より:
そのために、テーブルの列名を直打ちするのではなく、
動的に取得したいので、そのような質問をさせていただきました。


これは、ソースコードに固定で列名を使ったプロパティを書くのではなく、実行時に列名の数だけプロパティを持つ型を定義したいということですよね。
何に驚かれているのか分かりませんが、System.Reflection.Emitはまさにストライクじゃあないんですか?(実は使ったことはないんですけど)

それとも、動的ということではなくて、ソースコードの自動生成とかの話ですか?
データベースのテーブル定義を見てソースコードを自動で生成してくれるツールとか。

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