web-dev-qa-db-ja.com

独自のクラス名を取得するC#

MyProgramというクラスがある場合、 "MyProgram"を文字列として取得する方法はありますか?

373
deltanovember

これを試して:

this.GetType().Name
615
micahtan

私はこれを念のためにスローしたいと思いました。 @micahtanの投稿方法が望ましいと思います。

typeof(MyProgram).Name
196
ChaosPandion

C#6.0では、 nameof 演算子を使用できます。

nameof(MyProgram)
149
Cyanfish

Micahtanの答えはいいのですが、静的な方法ではうまくいきません。現在の型の名前を取得したい場合は、これはどこでも動作するはずです。

string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
118
Thomas Levesque

参考のために、もしあなたが他から継承する型を持っていればあなたも使うことができます

this.GetType().BaseType.Name
14
mikeschuld

派生クラスでこれが必要な場合は、そのコードを基本クラスに入れることができます。

protected string GetThisClassName() { return this.GetType().Name; }

それから、派生クラスで名前に到達することができます。派生クラス名を返します。もちろん、新しいキーワード "nameof"を使うとき、このような多様な行為のような必要性はないでしょう。

それ以外にも、これを定義することができます。

public static class Extension
{
    public static string NameOf(this object o)
    {
        return o.GetType().Name;
    }
}

そして、このように使います:

public class MyProgram
{
    string thisClassName;

    public MyProgram()
    {
        this.thisClassName = this.NameOf();
    }
}
10
bafsar

これを使って

ApplicationTest.exeが実行されていて、機能がfoo()であるとします。 inform1[基本的にはclass form1]です。それで、上記のコードは以下のレスポンスを生成します。

string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;

これは戻ります。

s1 = "TEST.form1"

関数名の場合:

string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;

戻ります

s1 = foo 

これを例外的に使用したい場合は注意してください。

catch (Exception ex)
{

    MessageBox.Show(ex.StackTrace );

}
8

MyProgramは型なので、実行できます

typeof(MyProgram).Name
1
nPcomp

Asp.netの現在のクラス名を取得

string CurrentClass = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name.ToString();
1
Abbas ali

thisは省略することができます。現在のクラス名を取得するために必要なのは、

GetType().Name
0
Mikael Engver