継承したクラスのクラス名の取得方法

このQ&Aのポイント
  • C#3.5を使用している場合、継承したクラスのクラス名を取得する際には、BaseClassで定義されているメソッドを使用します。
  • BaseClassのStackTraceを使ってクラス名を取得できるメソッドを持っています。
  • DerivedClass側でBaseClassのメソッドを使用してクラス名を取得することができます。
回答を見る
  • ベストアンサー

継承したクラス側のクラス名の取得

C#3.5を使用しています。 BaseClassはStackTraceを使ってクラス名を取得できるメソッドを持っています。 それを継承したDerivedClass側でそのクラス名「DerivedClass」を取得したいのですが、 次のようなやり方では「BaseClass」が取得されてしまいます・・・ あくまでBaseClass側に記述したメソッドのままで、DerivedClass側のクラス名を取得するには どのようにしたら良いのでしょうか? public class BaseClass { public string className; public string ClassName { get { if (className == null) { StackTrace st = new StackTrace(false); StackFrame sf = st.GetFrame(0); className = sf.GetMethod().ReflectedType.Name; } return className; } set { className = value; } } } public class DerivedClass : BaseClass { } var c = new DerivedClass(); MessageBox.Show(c.ClassName);// BaseClassと表示される

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

  • ベストアンサー
  • mha01
  • ベストアンサー率81% (9/11)
回答No.2

こんなのどうですか? class Program { public class BaseClass { } public class DerivedClass : BaseClass { } static void Main(string[] args) { var c = new DerivedClass(); Console.WriteLine(c.GetType().Name); } }

takagoo100
質問者

お礼

ご返答ありがとうございます。 なるほど、別にStackTraceを使わなくても そのやり方で取得できたんですね・・・

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ん~, 見た感じだと DerivedClass のコンストラクタで ClassName を設定する ことができるような気がするんだけど....

takagoo100
質問者

お礼

ご返答ありがとうございます。 なるべくDerivedClass側には記述せずにクラス名を取得したいと思ってます。

関連するQ&A

  • 呼び元のファイル名、行数を取得したい

    Visual Basic 2005で開発を行っています。 今回ログクラスを作成するに当たり、ログを出力する命令が発行された際に、 その呼び元であるクラス名、メソッド名、できればファイル名やその行数 を取得したいと思っています。 ネットで調べてみましたが、 New StackTrace().GetFrame(1).GetMethod().DeclaringType.ToString() New StackTrace().GetFrame(1).GetMethod().Name のようにして呼び元のクラス名、メソッド名の取得は出来たのですが、 ファイル名、行数などの取得が出来ません。 log4netを調べてみようかと思いましたが、ちゃちゃっと解析できるわけもなく・・・。 調べていたらデバッグシンボルを設定してあげると New StackTrace().GetFrame(1).GetFileName などが使えるようなのですが、そのデバッグシンボルの 設定の仕方が分かりません・・・。 どなたかファイル名、行数を取得する方法をご教示下さい。 また、それでデバッグシンボルというものの設定が必要であれば その設定方法もお願い致します。

  • クラス名

    JAVAの初心者です。 今実行しているクラスのクラス名を求めたいのですが うまくいかず困っております。 public class Person {   public static void main(String args[]);   {     String classname;     classname = this.class.getClass().getName();     System.out.println(classname);   } } イメージ的にはこんな感じなのかなと思ってやってみたのですが、 どうやら違うみたいです。どうぞご教授よろしくおねがいします。

    • ベストアンサー
    • Java
  • リフレクション 可変長引数メソッドの取得

    リフレクションで、(1)の方のメソッドインスタンスを得たいとき、どういった方法が考えられますか? //JDK 6.0 public Hoge { void method1(String str, Object ...objs){}//(1) void method1(String str, String str2){}//(2) } Hoge hoge = new Hoge(); Class c = hoge.getClass(); Method m12 = c.getMethod("method", String.class, String.class); Method m11 = c.getMethod("method", ?? );

    • ベストアンサー
    • Java
  • インスタンス内から自分のクラス名を取得する方法

    クラスインスタンス内から自分のクラス名を取得しようと思うと、self.class.nameで取得できますが、type.nameでも取得できます。 しかし、typeは非推奨メソッドとなっているため、警告が出て、このままでは使用することができません。 素直にself.classを使えばいいのかもしれませんが、selfのワンクッションがどうにも気に入りません。 スマートな記述方法あったら教えて下さい。 # self.class.nameを使用する場合 class MyClass  def print_classname   puts self.class.name   # puts class.name これはエラー  end end # type.nameを使用する場合 class MyClass2  def print_classname   puts type.name # これはdeprecatedの記述で警告が出る  end end

  • リフレクション

    リフレクションによって、Stringの値(strVal)を各クラスのオブジェクトに変換したいと思っております。 下のようなコードで、this.typeにセットしてあるオブジェクトのvalueOfメソッドを実行したいのですが、clazz.getMethod部分で次のようなExceptionが発生してしまいます。 staticメソッドはgetMethodでは取得・実行できないのでしょうか? ご存知の方いらっしゃいましたら、教えて頂けないでしょうか。 【Exception】 java.lang.NoSuchMethodException: java.lang.String.valueOf() 【コード】 Class clazz = Class.forName(this.type); Method method = clazz.getMethod("valueOf", new Class[0]); return method.invoke(clazz.newInstance(), new Object[]{strVal} ); 今回、this.typeには、"java.lang.String"が入っています。

    • ベストアンサー
    • Java
  • 全パッケージの取得、全クラスの取得、全メソッドの取得

    やりたい事は、メインクラスより、同階層の全パッケージを取得(A)、 (A)より同階層の全クラスを取得(B)、 (B)より同階層の全メソッドを取得といったような事です。 例えば public class a { public static void main(String args[]) {  全パッケージの取得  全クラスの取得  全メソッドの取得 } } みたいな感じに。 試行錯誤したのですが、その処理を行う事の出来るメソッドかどうかも良く分からないし、 コンパイルエラーになるばかりで実現が出来ません。  ・メインクラスから同階層のパッケージを取得してパッケージ名を出力。  ・メインクラスからxパッケージ内の同階層のクラスを取得してクラス名を出力。  ・メインクラスからxパッケージにあるyクラス内のメソッドを取得してメソッド名を出力。 上記のようなめちゃくちゃシンプルなコードを挙げてご教示願います。

    • ベストアンサー
    • Java
  • 配列クラスのクラス名

    配列クラスのクラス名 配列クラスのクラス名を教えてください。 配列はクラスですよね。そこまでは分かります。 こんなコードを実行しましたが System.out.println((new int[0]).getClass()); System.out.println((new boolean[0]).getClass()); System.out.println((new String[0]).getClass()); System.out.println((new Integer[0]).getClass()); 親切にこのような結果を出力してくれます。 class [I class [Z class [Ljava.lang.String; class [Ljava.lang.Integer; 結果として配列が何というクラスなのかは分かりません。 (もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?) 昔Javaのソースを読んだときに、配列クラスのファイルも 読んだことがあるような気がするのですが、 なんと言うクラスだったか忘れてしまいました。 パッケージ名+クラス名を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • クラスの中のクラスへのアクセス

    お世話になります。 クラスが以下のようにあります。 class ClassName1{ var $classname2_obj; // クラス「ClassName2」のオブジェクト function getClassName2Obj(){ return $this->$classname2_obj; } } class ClassName2{ var $array_list; // 配列です  function getArrayList(){ return $this->array_list; } } やりたいのは、ClassName1のgetClassName2Obj関数でClassName2の配列をgetArrayListで取得したいのです。 $a = new ClassName1; $b = $a->getClassName2Obj(); $c = $b->etArrayList(); 上の$b = … と$c = …の部分の処理を一行にまとめることはできないでしょうか? 何卒よろしくお願い致します。 PHPは5です。

    • ベストアンサー
    • PHP
  • PHPのクラス継承において質問

    class SuperClass{ public function getSuperClassName (){ //操作中のオブジェクトのクラス名を取得する print get_class($this); print "<br />"; print __CLASS__; } } class SubClass extends SuperClass{ public function getSubClassName (){ //操作中のオブジェクトのクラス名を取得する print get_class($this); print "<br />"; print __CLASS__; } $obj = new SubClass(); print "<br />"; $obj -> getSuperClassName(); print "<br />"; $obj -> getSubClassName(); 上記のようなコードがあった場合、 出力結果は SubClass SuperClass //継承しているにもかかわらず、SuperClassという文字列が返る。 SubClass SubClass と上記のようになります この結果に一点疑問があるのですが、親クラスのメソッドは子クラスに継承されるんですよね? であれば親クラスの public function getSuperClassName (){ //操作中のオブジェクトのクラス名を取得する print get_class($this); print "<br />"; print __CLASS__; } の箇所の print __CLASS__; の記述箇所はSubClassとでなければいけないような気がします。 しかし結果はSuperClassとでますが、このメソッドは子クラスに継承されていないのですか? publicなら継承されるとマニュアルにかいてありましたが、どうなっているのでしょうか よろしくご教授御願い致します。

    • ベストアンサー
    • PHP
  • 外部jarの標準出力を取得できますか?

    ClassLoaderで外部jarのクラスをロードし、実行するプログラムを作りました。 SimpleOutputは、単に渡された引数を標準出力に出すだけのものです。 この値を取得してGUI上に表示させたいのですが、取得する方法をご教授ください。 System.out.println("Load class"); URL[] urls = { file.toURI().toURL() }; ClassLoader loader = URLClassLoader.newInstance(urls); Class<?> cls = loader.loadClass("SimpleOutput"); System.out.println(cls); Object obj = cls.newInstance(); Method method = cls.getMethod("main", String[].class); String[] av = {"test"}; method.invoke(obj, new Object[]{av});

    • ベストアンサー
    • Java

専門家に質問してみよう