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()属性来获取当前类型的名称。调用返回被实例化的类型,而不是定义当前执行方法的类型,所以在基类中调用它会给你创建的派生子类的类型。thisNamethis.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属性,你需要在每个派生类中覆盖它:

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 回答