C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#成员函数获取所在类的名字

C#成员函数获取当前所在类的名字的四种方法

作者:Yashar Qian

文章介绍了在C#中获取当前类名的四种方法:使用this.GetType().Name、nameof(MyClass)、typeof(MyClass).Name和MethodBase.GetCurrentMethod().DeclaringType.Name,并比较了它们的适用场景、是否受继承影响以及性能特点,需要的朋友可以参考下

C# 成员函数中如何拿到当前所在类的名字?

在 C# 中,在类的成员函数(实例方法)中获取当前类的名称,有几种常用方法:

1. 使用this.GetType()(推荐)

public class MyClass
{
    public void PrintClassName()
    {
        string className = this.GetType().Name;       // 类名(不含命名空间)
        string fullName = this.GetType().FullName;    // 完全限定名(含命名空间)
        
        Console.WriteLine(className);    // 输出 "MyClass"
        Console.WriteLine(fullName);    // 输出 "Namespace.MyClass"(如果有命名空间)
    }
}

2. 使用nameof(编译时确定)

public class MyClass
{
    public void PrintClassName()
    {
        string className = nameof(MyClass); // 编译时替换为 "MyClass"
        Console.WriteLine(className);      // 输出 "MyClass"
    }
}

3. 使用typeof(MyClass)

public class MyClass
{
    public void PrintClassName()
    {
        string className = typeof(MyClass).Name;      // 类名(不含命名空间)
        string fullName = typeof(MyClass).FullName;   // 完全限定名(含命名空间)
        
        Console.WriteLine(className);    // 输出 "MyClass"
        Console.WriteLine(fullName);    // 输出 "Namespace.MyClass"
    }
}

4. 使用MethodBase.GetCurrentMethod()(反射方式,适用于静态方法)

using System.Reflection;

public class MyClass
{
    public void PrintClassName()
    {
        string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
        Console.WriteLine(className);  // 输出 "MyClass"
    }
}

如何选择?

方法适用场景是否受继承影响性能
this.GetType().Name实例方法,需运行时类型✔️ 是(返回实际类型)一般
nameof(MyClass)编译时已知类名❌ 否(固定类名)最佳
typeof(MyClass).Name编译时已知类名❌ 否(固定类名)最佳
MethodBase(反射)静态方法或无 this✔️ 是较差

示例:继承情况下的区别

public class ParentClass
{
    public void PrintName()
    {
        Console.WriteLine(this.GetType().Name);  // 实际类型(可能是子类)
        Console.WriteLine(nameof(ParentClass));  // 固定 "ParentClass"
        Console.WriteLine(typeof(ParentClass).Name); // 固定 "ParentClass"
    }
}

public class ChildClass : ParentClass { }

// 测试
var child = new ChildClass();
child.PrintName();

输出:

ChildClass   // this.GetType().Name
ParentClass  // nameof
ParentClass  // typeof

总结

以上就是C#成员函数获取当前所在类的名字的四种方法的详细内容,更多关于C#成员函数获取所在类的名字的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文