获取当前班级的名称

时间:2013-02-15 07:24:59

标签: c# .net-2.0

我有以下课程:

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 个答案:

答案 0 :(得分:4)

获取当前类名称的最简单方法可能是this.GetType().Name

答案 1 :(得分: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

答案 2 :(得分:1)

你从来没有告诉我们你的this.Name是什么。但是,如果需要获取运行时类型名称,则可以使用上述任何答案。那只是:

this.GetType().Name

你喜欢的任何组合。

但是,我想,你试图做的是拥有一个属性,为任何派生(或基础)类返回一定的值。那么你需要至少有一个protected virtual属性,你需要在每个派生类中重写:

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解决了这个问题,那么这显然是不必要的。

答案 3 :(得分:0)

我是这样做的,我一直用它来记录器:

using System.Reflection;

//...

Type myVar = MethodBase.GetCurrentMethod().DeclaringType;
string name = myVar.Name;