C# 获得自己的类名

问题描述 投票:0回答:11

如果我有一个名为

MyProgram
的类,有没有办法以字符串形式检索“MyProgram”?

c# reflection
11个回答
1072
投票

试试这个:

this.GetType().Name

309
投票

为了更好的衡量,我想把这个扔掉。我认为@micahtan发布的方式是首选。

typeof(MyProgram).Name

287
投票

在 C# 6.0 中,您可以使用

nameof
运算符:

nameof(MyProgram)

148
投票

虽然micahtan的答案很好,但它在静态方法中不起作用。如果你想检索当前类型的名称,这个应该可以在任何地方工作:

string className = MethodBase.GetCurrentMethod().DeclaringType.Name;

21
投票

如果您在派生类中需要此代码,您可以将该代码放入基类中:

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();
    }
}

17
投票

供参考,如果您有一个继承自另一个类型的类型,您也可以使用

this.GetType().BaseType.Name

11
投票

this
可以省略。获取当前类名所需要做的就是:

var className = GetType().Name

10
投票

用这个

假设应用程序 Test.exe 正在运行,并且函数是 form1 中的 foo() [基本上是 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 );

}

4
投票

这可以用于泛型类

类型(T).名称


3
投票

获取Asp.net当前类名

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

2
投票

最简单的方法是使用调用名称属性。但是,目前还没有属性类可以返回调用方法的类名或命名空间。

参见:CallerMemberNameAttributeClass

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
    System.Diagnostics.Trace.WriteLine("message: " + message);
    System.Diagnostics.Trace.WriteLine("member name: " + memberName);
    System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
    System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output:
//  message: Something happened.
//  member name: DoProcessing
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31
© www.soinside.com 2019 - 2024. All rights reserved.