• ベストアンサー

C#文字でクラスのメンバにアクセス

通常クラスを使用する場合は、以下のコードで使用できますが、 MyClass m = new MyClass(); m.MyInt = 0; m.MyString = ""; 下記のイメージで文字でクラスのメンバにアクセスできませんか。(大量のクラスがあり、intのメンバだけを一気に初期化したい) MyClass m = new MyClass(); m["MyInt"] = 0; お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

大量のクラスがMyIntを有するインターフェースを実装しているならば、 そのインターフェースを型としてインスタンス化すればできるでしょう。 List<IMyIf> myIf = new List<IMyIf>(); myIf.Add(new MyClass()); myIf.Add(new MyClass2()); foreach (IMyIf value in myIf) { value.MyInt = 0; } みたいな。 そうではなくて、アクセサを直接操作したい場合は、PropertyInfoでどうでしょうか。 List<object> cls = new List<object>(); cls.Add(new MyClass()); cls.Add(new MyClass2()); foreach (object value in cls) { Type type = value.GetType(); System.Reflection.PropertyInfo pi = type.GetProperty("MyInt"); if (pi != null) { pi.SetValue(value, 0, null); } } みたいな。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8536/19409)
回答No.1

コンストラクタで初期化するようにコーディングするんじゃダメなの? コンストラクタで初期化するようにコーディングするなら、クラスの実体を定義している所に初期化文を書くだけだが? つか、メンバ変数の定義の所の int MyInt; を int MyInt = 0; に書き換えれば済むんだが。 >大量のクラスがあり 似たクラスが大量に定義されてんのかな? それとも、基本クラスが1つあって、何百個も実体をnewしてるのかな? 前者だったら、クラス定義のコンストラクタ全部を書き直さないといけないが、後者だったら、基本クラスの定義部分のコンストラクタに1行書き加えるだけだ。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C++ クラスをメンバにもつクラスについて

    お世話になります。C++初心者でうまくコードが書けません(><) クラス1と2があり、クラス1のメンバにはクラス2があります。 メインでクラス1をインスタンス化してクラス2のfunc2を呼び出します。 func2ではクラス1のインスタンスから呼び出された場合にクラス1の m_int1を取得します。 Class Class1{ public:  int m_int1;  Class2 m_Class2; }; Class Class2{ public: void func2(); }; void Class2::func2(){  /*ここの記述方法が分かりません*/  /*C1から呼び出されたらC1のm_int1に100を入れる*/  /*以下間違え*/  class1 C2_1;/*別のclass1のオブジェクトなのでこれに入れてもダメっぽい*/  C2_1.m_int1 = 100; } void main(){  class1 C1;  C1.m_int1 = 10;  C1.m_class2.func(); } C1.m_class2.func()の中から呼び出したC1にアクセスする方法が 分かりません(TT)。実体がまだあるのだからアクセスする方法は あると思うのですが・・・ どなたかよろしくお願いします。

  • クラスがメンバーとしてクラスを持つ時の宣言について

    自作クラスMainClassがMyClassというクラスをメンバー変数として持つ場合、宣言時に引数をいくつか持つコンストラクタを呼び出そうとすると構文エラーとなります。 class MyClass { public: MyClass(int, int); } class MainClass { private: MyClass myclass(10,10); } このような宣言はできないのでしょうか。 引数なしのコンストラクタは呼び出せているようです。

  • 派生クラスのメンバを基底クラスの参照に代入(C++

    文末のコードのように、 基底クラスで、派生クラスのメンバの参照を持つのはまずいでしょうか。 (classではなくstructにしているのは質問上でのpublic:の省略のためだけです) 初期化順序的には、基底クラスの参照先は、 基底クラスのコンストラクタが走る時点で初期化されていないので、 コンストラクタ内で参照に対して何かしようとすると問題になると思っています。 基底クラスのコンストラクタ内で派生クラスメンバの参照に対して何かしなければ、 参照は有効で、派生クラスのコンストラクタ実行後であれば 問題なく動くと思ってよいでしょうか。 struct A { int& m_ref; A(int& ref) : m_ref(ref) { } }; struct B : public A { int m_obj; B() : A(m_obj) { } };

  • C++ クラス概念

    以下の違いがよく理解できていません。 どなたかご教授お願い致します。 (1)クラスのメンバー変数に static を付けた場合と、 メンバーではない変数に static を付けた場合の違い (2)クラスのメンバー関数に static を付けた場合と、 メンバーではない関数に static を付けた場合の違い [プログラム例] class MyClass { public: static int internalCount; static void func(MyClass& a) {/* ... */} }; static int i; static void f(MyClass& a) { /* ... */ }

  • C++でfriendクラスにしているのにprivateメンバにアクセスできない

    C++でメンバ変数をprivateにして、特定のクラスにだけ公開するようにクラスをfriend指定したのですがprivateメンバにアクセスできませんとエラーが吐かれてしまいます。 先行宣言したりもしてみたのですがどうしても使用できません。 何か心当たりのあるかた教えてください。 class A { friend class B; private: int a; }; class B { public: void test( A *a ) { a->a = 0; } }; コードは違いますがこんな感じのことをしたいのです。 /* コンソールで小さなプログラムでテストしてみると動くのにいざ実際のソースに組み込むと動かないという奇妙な状態です。よろしくお願いします。 */

  • クラスのメンバへのアクセス方法(C#)

    クラスのメンバへのアクセス方法(C#) テキストファイルから複数の情報を取得し、クラスの各メンバに格納しようとしています。 その際クラスのメンバ名をいちいち指定して情報を格納しているのですが美しくありません。 クラスのメンバはインデックスなどで指定することは出来ないのでしょうか? 例. for (int i = 0; i < 3; i++) { str[i] = reader1.ReadLine(); } data.name = str[0]; data.kind = str[1]; data.val = str[2]; これをこんな感じにしたい↓↓↓ for (int i = 0; i < 3; i++) { data.メンバ(i) = reader1.ReadLine(); } C#初心者なのでトンチンカンな質問であってもご容赦ください。よろしくお願いします。

  • 【C#】クラスのメンバ変数のアクセス修飾子の省略

    初歩的な質問かもしれませんが、 C#にてクラスのメンバ変数を定義する際、 public int x; public int y; のように、変数一つずつにアクセス修飾子をつけなければいけないのでしょうか? 例えば、C++/CLIだと public: int x; int y; のように書くことで、個別に修飾子をつけなくても、 複数の変数に対してアクセスレベルを設定できたのですが。。 ご存知の方おられましたら、ご教示お願い致します。

  • vector<char *> のデータの問題について

    C++の初心者ですが、現在勉強中です。 私が今以下のような問題があります。 class myclass{ private: vector<char *> mystring; public: void setVetcot(); void printvector(); }; void myclass::setVetor(){ mystring.push_back("sample"); } void myclass::printvecot(){ print("%s", *mystring); } int main(){ myclass m; m.setVetcot(); m.printvetcot(); } vectorの内容がなくなります。問題がどこでしょうか?

  • ネストトップクラス・メンバクラスについて

    現在、SJC-P取得に向け独学でJavaの勉強中です。 ネストクラス・インナークラスについて勉強している最中なのですが、 数冊テキストを読み込んでも、web検索をしても、イマイチよくわからない・・・というのが正直なところです。 どのクラス(アウタークラス/staticインナークラス/非staticインナークラス)の、 どういうメンバ(static/非static/private/final)が、 どのクラスのどういうメンバにアクセス出来るのかが整理しきれません・・・。 わからないなりに、まとめてみたのですが、理解が不十分で、かつ、この下記の通りの理解で正しいのかどうかもわかりません。 (言葉でうまく表現も出来ていない箇所も・・) また理解すべきポイントに不足があるかと思います。 どこが正しく理解出来ているのか・どこがどう間違っているかの指摘及びその内容・理解不足の箇所・よりわかりやすい例の追加や補記など、どうかよろしくお願い致します。 ●staticなインナークラス(=ネストトップクラス)について ・アウタークラスのインスタンスなしに、staticなインナークラスのインスタンスの生成が出来る。 ・staticなインナークラスからはアウタークラスの非staticメンバを直接アクセス出来ない。 (→ただし、staticアウターメンバになら直接アクセス出来る?staticであればprivateでもアクセス可?) ・staticなメソッド内で非staticなインナークラスのオブジェクトが生成出来ない。 ●非staticなインナークラス(=メンバクラス)について ・非staticなインナークラス内にstaticなメンバを持つことは出来ない。 ・アウタークラスのインスタンスを生成してからでないと非staticなインナークラスのインスタンスは生成出来ない。 ・アウタークラスの非staticメンバ及びstaticメンバに直接アクセス出来る。 ●アウタークラス(=外部クラス)について ・アウタークラスのstaticメソッド内で非staticなインナークラスのインスタンスは生成出来ない。 ・非staticインナークラスのメンバ及び、staticなインナークラスのメンバにアクセス出来る。 --------------------------------------------------------- (例)処理はさておき、定義はこんな感じを思い描いております・・ class Outclass{   private int aa;   private static int bb;   private outMethod1();   private static outMethod2();   class NotStaticInner{     private int cc;     //private static int dd;//不可     private inNotStaicMethod1();     //private static inNotStaticMethod2();//不可   }   class StaticInner{     private int ee;     private static int ff;     private inStaticMethod1();     private static inStaticMethod2();   } } 参考テキスト: 『Sun Certified Programmer for Java2 Platform5.0 Exam【310-055】』のChapter11:「ネストクラス・インナークラス」 参考URL: http://wisdom.sakura.ne.jp/programming/java/java46.html

  • クラス型のメンバ変数について

    クラス型のメンバ変数って、どういったメリットがあるのでしょうか? 以下のプログラムは疑問点の部分だけ書いたプログラムです。 class Caaa { (内容) }; class Cbbb { protected: Caaa m_bbb; } 上のプログラムの、 Caaa m_bbb; の部分が、どういった意味(使い道)があるのかわかりません。 int型やvoid型のメンバ変数は分かるのですが、他のクラスの型をもったメンバ変数はどういった意味があるのでしょうか。 どなたが教えてください。