2013-02-15 198 views
3

我有下面的類:獲取當前類的名稱

public class dlgBoughtNote : dlgSpecifyNone 
{ 
    public com.jksb.reports.config.cases.BoughtNoteReport _ReportSource; 

    public dlgBoughtNote() 
    { 
     btnPreview.Click += new EventHandler(Extended_LaunchReport); 
     this.Text = "Bought Note Print"; 
    } 

    protected override void InitReport() 
    { 
     _ReportSource = new com.jksb.reports.config.cases.BoughtNoteReport(null); 
     ReportSourceName = _ReportSource; 
    } 
} 

從技術上講,如果我叫下面的構造dlgBoughtNote()

public dlgBoughtNote() 
{ 
    btnPreview.Click += new EventHandler(Extended_LaunchReport); 
    this.Text = "Bought Note Print"; 
    MessageBox.Show(this.Name); 
} 

我應該得到的結果爲「dlgBoughtNote」,但我'越來越像「dlgSpecifyNone」。除了我正在做的事情之外,還有什麼方法可以獲得當前班級的名字嗎?

+0

您是否需要當前類的名稱或當前實例的'Name'屬性? – SWeko 2013-02-15 07:29:03

+0

我需要獲取當前類的名稱。我用'this.GetType()完全填充了它。Name' – hiFI 2013-02-15 08:54:43

回答

4

獲取當前班級名稱的最簡單方法可能是this.GetType().Name

0

下面是我如何做到這一點,我用它爲我記錄所有的時間:

using System.Reflection; 

//... 

Type myVar = MethodBase.GetCurrentMethod().DeclaringType; 
string name = myVar.Name; 
2

您可以撥打thisGetType()來獲得實例的類型,並使用類型的Name財產獲取當前類型的名稱。調用this.GetType()將返回實例化的類型,而不是定義當前正在執行的方法的類型,因此在基類中調用它將爲您提供從中創建的派生子類的類型this

有點混亂......這裏有一個例子:

public class BaseClass 
{ 
    public string MyClassName() 
    { 
     return this.GetType().Name; 
    } 
} 

public class DerivedClass : BaseClass 
{ 
} 

... 

BaseClass a = new BaseClass(); 
BaseClass b = new DerivedClass(); 

Console.WriteLine("{0}", a.MyClassName()); // -> BaseClass 
Console.WriteLine("{0}", b.MyClassName()); // -> DerivedClass 
1

你從來沒有告訴我們,你的this.Name是什麼。但是,如果您需要獲取運行時類型名稱,則可以使用上述任何答案。這只是:

this.GetType().Name 

以您喜歡的任何組合。

但是,我想,你試圖做的是有一個屬性,返回任何派生(或基)類的某個特定的值。然後,你需要至少有一個protected virtual屬性,你將需要在每個派生類中重寫:

public class dlgSpecifyNone 
{ 
    public virtual string Name 
    { 
     get 
     { 
      return "dlgSpecifyNone";//anything here 
     } 
    } 
} 

public class dlgBoughtNote : dlgSpecifyNone 
{ 
    public override string Name 
    { 
     get 
     { 
      return "dlgBoughtNote";//anything here 
     } 
    } 
} 

但是,這顯然是沒有必要的,如果this.GetType().Name解決了這個問題非常。

+0

thanks mate!那是我需要的。 – hiFI 2013-02-15 08:57:38

+0

@Hifni很高興我的回答幫了你 – horgh 2013-02-15 09:07:05