3

私は次のクラスを持っています:

public class dlgBoughtNote : dlgSpecifyNone
{
    public com.jksb.reports.config.cases.BoughtNoteReport _ReportSource;

    public dlgBoughtNote()
    {
        btnPreview.Click += new EventHandler(Extended_LaunchReport);
        this.Text = "Bought Note Print";
    }

    protected override void InitReport()
    {
        _ReportSource = new com.jksb.reports.config.cases.BoughtNoteReport(null);
        ReportSourceName = _ReportSource;
    }
}

技術的には、次のコンストラクタ dlgBoughtNote() を呼び出した場合

public dlgBoughtNote()
{
    btnPreview.Click += new EventHandler(Extended_LaunchReport);
    this.Text = "Bought Note Print";
    MessageBox.Show(this.Name);
}

「dlgBoughtNote」として結果を取得する必要がありますが、「dlgSpecifyNone」として取得しています。私がやっている方法以外に、現在のクラスの名前を取得する方法はありますか?

4

4 に答える 4

4

現在のクラスの名前を取得する最も簡単な方法は、おそらくthis.GetType().Name.

于 2013-02-15T07:29:20.743 に答える
2

を呼び出しGetType()thisインスタンスNameの型を取得し、その型のプロパティを使用して現在の型の名前を取得できます。呼び出すthis.GetType()と、現在実行中のメソッドを定義した型ではなく、インスタンス化された型が返されるため、基本クラスで呼び出すと、this作成元の派生子クラスの型が得られます。

少し紛らわしい...ここに例があります:

public class BaseClass
{
    public string MyClassName()
    {
        return this.GetType().Name;
    }
}

public class DerivedClass : BaseClass
{
}

...

BaseClass a = new BaseClass();
BaseClass b = new DerivedClass();

Console.WriteLine("{0}", a.MyClassName()); // -> BaseClass
Console.WriteLine("{0}", b.MyClassName()); // -> DerivedClass
于 2013-02-15T07:32:07.670 に答える
1

あなたが何であるか、あなたthis.Nameは私たちに言ったことはありません。ただし、ランタイム型名を取得する必要がある場合は、上記の回答のいずれかを使用できます。それはただです:

this.GetType().Name

お好きな組み合わせで。

ただし、あなたがやろうとしたことは、派生 (または基本) クラスのいずれかに対して特定の値を返すプロパティを持つことだったと思います。protected virtual次に、派生クラスのそれぞれでオーバーライドする必要がある、少なくとも 1 つのプロパティが必要です。

public class dlgSpecifyNone
{
    public virtual string Name
    {
        get
        {
            return "dlgSpecifyNone";//anything here
        }
    }
}

public class dlgBoughtNote : dlgSpecifyNone
{
    public override string Name
    {
        get
        {
            return "dlgBoughtNote";//anything here
        }
    }
}

this.GetType().Nameしかし、これがまさにこの問題を解決するのであれば、これは明らかに不必要です。

于 2013-02-15T07:53:46.960 に答える
0

これが私が行う方法です。私は常にロガーに使用しています:

using System.Reflection;

//...

Type myVar = MethodBase.GetCurrentMethod().DeclaringType;
string name = myVar.Name;
于 2013-02-15T07:31:06.123 に答える