2016-08-08 131 views
0

在Android中,如果我需要獲得當前類的名字,我可以這樣做:獲取當前類的名稱

private final _TAG = DummyActivity.this.getClass().getSimpleName(); 

將返回「DummyActivity」

我想要做的在C#中相同WPF應用程序代碼隱藏。我如何獲得當前課程的名稱?

this.GetType().Name; //this works only on instances of a class 

貌似唯一的選擇就是這樣在C#硬編碼:

private const string _TAG = "DummyWindow"; 
+2

看到這個:http://stackoverflow.com/questions/2081612/net-determine-the-type-of-this-class-in-its-靜態方法 –

+0

請注意標記的副本的問題比這更具體,要求在編譯時不可用的信息。然而,這裏有很多答案,其中有幾個適用於此。重要的是要注意,雖然標記爲重複的問題假設在靜態基類方法中,它們可以告訴它們是否通過派生類被調用,但實際上這不正確。你可以做的最好的是找到聲明類的類型,這就是這裏所要求的,並且在重複地址中有答案。 –

回答

3

實例就確實是「當前」,這個概念並沒有太大的意義,否則。如果你只是想知道類型的名稱那將是typeof(Class).Name

+0

但typeof(Class).Name的結果不能分配給常數 – pixel

+0

@ dbnex14:爲什麼在世界中您需要將它分配給一個常量?那麼,因爲你不使用'FullName',你可以使用'nameof(Class)'我想。 –

+1

@ dbnex14:另外,你可以用'readonly'替換'const',你將能夠做更多的事情。 (它不再需要編譯時間常量。) –

2

嘗試

typeof(DummyActivity).Name 
1
nameof(DummyActivity) == new DummyActivity().GetType().Name 
+0

'nameof'僅支持C#6.0 – Marusyk

3

呦ü可以用C#像這樣做:

private static string _TAG = MethodBase.GetCurrentMethod().DeclaringType.Name; 

這工作,因爲初始化該領域的靜態構造函數實際情況。即,MethodBase.GetCurrentMethod()返回該類的靜態構造函數。

+0

非常感謝。這也適用。但我先接受了H.B.的回答,他的解決方案也是如此。 – pixel

0

完全一樣的語句在C#6:

private static readonly string _TAG = nameof(DummyActivity); 
+1

這個問題是http://stackoverflow.com/questions/2081612/net-determine-the-type-of-this-class-in-its-static-method的重複。假設沒有提到'nameof'運算符的答案,你應該在那裏發佈你的答案並投票結束這個問題作爲另一個問題的重複,而不是把你的答案放在這裏。坦率地說,無論如何,你的答案會在另一個問題上獲得更多的可見性。作爲這樣一個常見的副本,它是高度投票,並將通過搜索更容易找到。 –

+0

@PeterDuniho謝謝,會做! – CoolBots

+0

@PeterDuniho:這個問題提到,雖然類型是未知的,'nameof'只適用於已知類型。 –