C#成員函數(shù)獲取當(dāng)前所在類的名字的四種方法
更新時間:2026年02月25日 09:24:40 作者:Yashar Qian
文章介紹了在C#中獲取當(dāng)前類名的四種方法:使用this.GetType().Name、nameof(MyClass)、typeof(MyClass).Name和MethodBase.GetCurrentMethod().DeclaringType.Name,并比較了它們的適用場景、是否受繼承影響以及性能特點,需要的朋友可以參考下
C# 成員函數(shù)中如何拿到當(dāng)前所在類的名字?
在 C# 中,在類的成員函數(shù)(實例方法)中獲取當(dāng)前類的名稱,有幾種常用方法:
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"(如果有命名空間)
}
}
- 適用場景:適用于實例方法,能正確反映運行時類型(包括繼承的情況)。
- 注意:如果子類繼承
MyClass,this.GetType().Name會返回子類的名稱。
2. 使用nameof(編譯時確定)
public class MyClass
{
public void PrintClassName()
{
string className = nameof(MyClass); // 編譯時替換為 "MyClass"
Console.WriteLine(className); // 輸出 "MyClass"
}
}
- 適用場景:適用于編譯時已知類名,不受繼承影響(即使子類調(diào)用,仍然返回
MyClass)。 - 優(yōu)點:性能最佳(編譯時靜態(tài)解析)。
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"
}
}
- 適用場景:適用于編譯時已知類名,不受實例影響(靜態(tài)方法也可用)。
- 注意:和
nameof類似,不受繼承影響。
4. 使用MethodBase.GetCurrentMethod()(反射方式,適用于靜態(tài)方法)
using System.Reflection;
public class MyClass
{
public void PrintClassName()
{
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Console.WriteLine(className); // 輸出 "MyClass"
}
}
- 適用場景:適用于靜態(tài)方法或無法使用
this的情況。 - 缺點:性能較差(反射開銷)。
如何選擇?
| 方法 | 適用場景 | 是否受繼承影響 | 性能 |
|---|---|---|---|
this.GetType().Name | 實例方法,需運行時類型 | ?? 是(返回實際類型) | 一般 |
nameof(MyClass) | 編譯時已知類名 | ? 否(固定類名) | 最佳 |
typeof(MyClass).Name | 編譯時已知類名 | ? 否(固定類名) | 最佳 |
MethodBase(反射) | 靜態(tài)方法或無 this 時 | ?? 是 | 較差 |
示例:繼承情況下的區(qū)別
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
總結(jié)
- 如果想獲取 運行時實際類型(包括繼承情況),用
this.GetType().Name。 - 如果只需要 當(dāng)前類的編譯時名稱(不受繼承影響),用
nameof(MyClass)或typeof(MyClass).Name。 - 如果是在 靜態(tài)方法 里,可以用
MethodBase.GetCurrentMethod().DeclaringType.Name或typeof(MyClass).Name。
以上就是C#成員函數(shù)獲取當(dāng)前所在類的名字的四種方法的詳細(xì)內(nèi)容,更多關(guān)于C#成員函數(shù)獲取所在類的名字的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解WPF如何在Panel中實現(xiàn)設(shè)置所有子項間距
這篇文章主要為大家詳細(xì)介紹了WPF如何在Panel中實現(xiàn)設(shè)置所有子項間距,本文借鑒了 Qt 中的 Spacing 設(shè)置方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10
C#基于Spire.Doc for .NET從URL下載Word文檔的實現(xiàn)方案
在日常的軟件開發(fā)中,我們經(jīng)常會遇到這樣的場景:需要從一個指定的 URL 地址下載文件,當(dāng)涉及到 Word 文檔這類復(fù)雜的二進制格式時,情況就變得不那么簡單了,本文將深入探討在 C# 應(yīng)用程序中,如何高效、可靠地從 URL 下載 Word 文檔,需要的朋友可以參考下2025-12-12
Winform之TextBox輸入日期格式驗證yyyy-mm-dd
Winform之TextBox輸入日期格式驗證yyyy-mm-dd的實例與正則表達(dá)式,需要的朋友可以參考一下2013-02-02
C#使用HttpClient進行Post請求出現(xiàn)超時問題的解決及優(yōu)化
最近我的控制臺程序發(fā)現(xiàn)有時候總是出現(xiàn)請求超時等問題,通常好幾分鐘最多只有3-4個請求,在使用apipost發(fā)現(xiàn)并發(fā)10個5分鐘也沒有問題,那么問題就出在我的請求端了,所以本文給大家介紹了C# 使用HttpClient進行Post請求總是出現(xiàn)超時問題的優(yōu)化,需要的朋友可以參考下2025-01-01

