• 締切済み

C# 変数の動的な再定義

こんにちわ  変数の動的な再定義というものが可能かどうかお伺いしたく質問させていただきました。 具体的には宣言時にはpublic int numberと宣言しておいて、プログラムのLoad時に、プログラム内でdouble型で宣言しなおすといった内容です。 ※上記の内容は質問用のサンプルです。ジェネリックを使えばいいとかあると思いますがあくまで可能かどうかの質問です。 やりたいことは、プログラム実行時に型を決めて、コンパイルも通したいという内容です。 dynamicを使用すれば想定通りの動きのものはできましたが、別のやり方も模索しております。 プログラム内でなんとか再定義ができないものかと思ってます。

みんなの回答

回答No.2

実行時に型を作ること自体は可能です。 が,作った型を使うことはリフレクションを山のように使うことになるので現実的ではないと思います。 ・System.Reflection.Emit http://msdn.microsoft.com/ja-jp/library/system.reflection.emit(v=vs.110).aspx 直接にILを用いて型等を生成する方法。ILが分かるのであれば。 ・System.CodeDom http://msdn.microsoft.com/ja-jp/library/system.codedom(v=vs.110).aspx Emitよりは上位の概念を利用して実行時に型等を生成する方法。 ・Roslyn http://roslyn.codeplex.com/ .NETで書かれたC#/VB等のコンパイラ。構文解析結果を取り出したりもできます。

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

C#は静的型付けですのでできません。

関連するQ&A

  • 変数宣言・変数定義のちがいって??

    変数宣言・変数定義のちがいって?? 同じ意味なんでしょうか? 私の解釈では、 ・宣言っていうのは、今からこの変数を使いますよってことで。 ・定義っていうのは、実際に変数の領域をわりあてるってイメージなんですけど・・ なので、 int a; ←これは変数定義 extern int a; ←これは変数(extern)宣言 あってるでしょうか?

  • 変数の型を定義しなかった場合どうなりますか?

    現在、VBAを使ってプログラミングを行っているところなのですが、 一般的に、プログラムの最初で変数に対してintegerやlongといった型を定義してから使うというように教わりますが、このように型を定義しなくとも使うことが出来ます。もし定義しなかった場合、その変数の型は何に設定されているのでしょうか? では型を定義するメリット及び、せずに使った場合のデメリットは何なのでしょうか? 私が使っているのはVBAですが、他の言語では型を定義しなければ、その変数を使うことが出来ないというようなものもあるのでしょうか?

  • 大量の変数を定義するにはどうしたら良いですか?

    VBA或いはVBのプログラムの最初で変数の型を定義したい場合、 変数が100個以上ある場合にはどうすれば良いのでしょうか? 100行にも渡って変数の定義を書くのはあまりにも見づらいと思います。何か良い方法がありましたら教えて下さい。

  • c# 配列変数の宣言について

    c#の配列変数の宣言についてですが、 以下の2つの宣言は同じことなのでしょうか。 (1)int[] num = {1,2,3}; (2)int[] num = new int{1,2,3}; 本では(2)のような定義していますが何かルールのようなものがあるのでしょうか。 宜しくお願いします。

  • 自作関数のでの変数宣言について

    #include <stdio.h> int i,j; int cale(int i,int j) //cale関数の内容;iとjの宣言も同時実施!!! { int r;      r=i+j; return r; } 3行目でcale関数の定義をしています。2行目では変数i,jの初期宣言をしていますが、本によると2行目は必要なくコンパイルしても問題がありませんでした。ボーランドですけど。 教えて欲しいのは2行目の変数宣言は必要なのですか?? 正規の書き方を教えてください。

  • 複雑なポインタの定義

    #include <stdio.h> typedef int *(*i[3])[2]; int main() { int a = 0; int b = 1; int c = 2; int d = 3; int e = 4; int f = 5; int *u[2] = {&a, &b}; int *v[2] = {&c, &d]; int *w[2] = {&e, &f}; int **pp[3] = {u, v, w}; /* arrayをi型(intへのポインタを要素とする2個の配列へのポインタを要素とする3個の配列)として宣言 */ i array; /* この部分でarrayを使って変数a~fの内容を表示したい */ } 上記の最後の部分で、typedefで定義したi型の変数arrayを使って、変数a~fの内容を表示させたいのですが、その上で定義している諸々の変数との型の不整合が起こって、どういう記述をしたらよいか分かりかねています。要は、複雑なポインタの型定義をした場合の使い方がよく分からないのです。 御経験のある方は、御教示願えれば助かります。

  • 標準Cでのオブジェクト(変数)の定義について

    標準Cのオブジェクト(変数)の定義に「その内容によって、値を表現することができる実行環境中の記憶域の領域。ビットフィールド以外のオブジェクトは、連続する1つ以上のバイトからなる。そのバイトの個数、順序および符号化規則は、明示的に規定するかまたは処理系定義とする。 オブジェクトを参照する場合、オブジェクトは、特定の型をもっていると解釈してもよい。」とありますが、具体的に何を指しているのかが解りません。以下のように疑問点をまとめました。 1、「そのバイトの個数、順序および符号化規則は、明示的に規定するかまたは処理系定義とする。」    Int型 long型 double型等を例に取ると、「処理系定義」はそのバイト数が4バイト8バイトと考えられますが、「明示的に規定する」とは、Int型 long型 double型等で具体的にどのような定義を指しているのでしょうか? 2、「オブジェクトを参照する場合、オブジェクトは、特定の型をもっていると解釈してもよい。」とは、具体的に一体何を言いたいのか解りかねます。「参照」とは何を指しているのか?ポインタを指しているのか、「ポインタを指している」としたならなぜそれをここに書き加える必要があるのか?それとも、もっと一般的な事をいっているのか?もしもっと一般的な事を言っているならそれは何なのか? 宜しく願います。

  • ポインタ変数を変数に渡す方法

    (int * 型)ポインタ変数に代入されたアドレスを、(普通の)int 型変数に代入したいのですが、どのようにするのが正しいのでしょうか。 想定しているケースは、与えられたメモリ番地に対して、アドレスオフセットを加えるなどの操作を施して「補正アドレス」を生成し、メモリアクセスを行う、というような特殊な操作を実現するような場合です。 ※ メモリ番地がポインタ宣言で与えられる、という制約があります。 以下サンプルプログラムを書きました。組み込み系のプログラムを記述していますが、これで正しいでしょうか。 unsigned int *p, *p1; // ポインタ変数宣言 unsigned int value; p= (unsigned int *)0x00001F00; // メモリの0x1F00番地 value = p; // <-- ここが心配 value |= 0xCC << 16; // 与えられたアドレスから value &= 0x4 << 12; // 「補正アドレス」生成 p1 = (unsigned int *)value; *p1 = 0xA5A5_A5A5; // 「補正アドレス」にA5A5... をライト C言語初心者で、いろいろなサイトを見てみたのですが、説明されているページが見つからず質問させていただきました。どうぞよろしくお願いします。

  • 動的ライブラリ中のグローバル変数

    以下の3行を前提条件とします。 メインのプログラムmainと動的ライブラリsub1.soとsub2.soがあります。 sub1.cとsub2.cにはsub.hというヘッダをインクルードしています。 mainはsub1.soおよびsub2.soを実行時に動的にリンクします。 ここでsub1.c中で int TEST=10;と変数を定義しました。 さらにsub.h中にextern int TEST;と変数を宣言しました。 そしてsub2.h中で if(TEST){…}と記述しました。 この状態でコンパイルを実行しました。 ここでmainを実行すると動きません。 調べてみるとsub2.soがTESTがundefined symbolとなっていました。 動的ライブラリ間での変数の共有の仕方は上の書き方では不正確なのでしょうか?

  • visual C++でのグローバル変数の宣言

    visual C++でマスの色を読みとって、いろいろな処理を行うプログラムを作成中なのですが、グローバル変数として以下の宣言をしたときに、以下のエラーが出ます。 struct{ int r; int g; int b; }rgb[10][10]; //マス数は10×10までとする error C3183: マネージ型 'SOMsample::Form1' の中で名前のないクラス、構造体またはユニオンを定義することはできません。 これをbuilder5で書き込んだときはエラーが出なかったのですが、visual C++ではどう書けばいいのでしょうか? 回答よろしくお願いします。

専門家に質問してみよう