问题描述
比如,在C#/.NET应用程序编程开发中有一个名为Customer的类,其中有一个方法GetClassName()需要获取当前类的类名,应该如何实现呢?
Customer.cs:
public class Customer
{
public int Id {get;set;}
public string GetClassName(){
string className ="";
// get class name here...
return className;
}
}
方案一
如果是实例(非静态)的方法,则可以首先使用GetType()获取当前类对应的实例的类型,再通过类型获取当前实例对象对应的类的名称,如(完整示例):
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var customer = new Customer();
Console.WriteLine("customer class name: {0}",customer.GetClassName());
}
}
public class Customer
{
public int Id {get;set;}
public string GetClassName(){
var className ="";
var type = this.GetType();
className = type.Name;
return className;
}
}
输出结果为:
customer class name: Customer
方案二
在C#/.NET应用程序开发中,除了使用实例的GetType()外,也可以使用typeof()来获取对象的类型,如:
var className = typeof(Customer).Name;
方案三
如里你是基于C# 6.0及以上版本,还可以使用nameof()方法来快捷地获取类的名称,如:
var className = nameof(Customer);
方案四
如果是静态方法,则可以使用MethodBase类中的GetCurrentMethod()获取当前类的名称,如
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
(完整示例):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
public class Program
{
public static void Main()
{
Console.WriteLine("customer class name:{0}",Customer.GetClassName());
}
}
public class Customer
{
public int Id {get;set;}
public static string GetClassName(){
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
return className;
}
}
温馨提示:本文标注有(完整示例)的示例代码可以直接在try.dot.net运行。