[英]How to Know Static Methods's Class Name
我有一個類,它有一些靜態方法。 我還有另一個班級繼承我的第一個班級,如下所示;
public class Business
{
public static DataTable Get()
{
}
}
public class Model : Business
{
public int ID { get; set; }
public string CompanyName { get; set; }
}
我像下面這樣使用它;
Model.Get();
在Do方法內部,我嘗試捕獲Model類的類型。 我可以在Do方法的內部捕獲如下的Business class類型;
public static DataTable Get()
{
Type t = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}
但是我無法捕獲Model類類型。 我怎樣才能做到這一點?
注意: Business類中的get方法選擇從哪個類調用它的列。 這就是為什么我需要Model類的名稱。 原因是Model類的名稱將是表的名稱,它將從表Model中選擇列。
注2:通常我會這樣使用;
Business.Get<Model>();
我可以從模型表中獲取所有數據。 但是我嘗試像這樣使用它;
Model.Get();
你不能 沒有什么叫做B.Do()
。 它隱含意味着A.Do()
。
Do
是A
定義的靜態方法。 Do
方法中Do
存在B
元數據,因為它在A
定義。
能夠調用B.Do();
只是C#編譯器為您提供的便利。 請注意,重新共享工具會警告您使用派生類型的基類成員的這種用法。
請注意,即使您寫
B.Do();
編譯器將其轉換為
call A.Do// Call IL
更新:至於更新的問題,我建議您使用實例方法而不是靜態方法。
Model model = new Model();
model.Get();
在get里面,您可以使用GetType().Name
來獲取當前實例的類名。
public class Business
{
public DataTable Get()
{
string className = this.GetType().Name;
}
}
當涉及static
方法時,沒有方法繼承。 我相信,僅出於方便起見,才允許在B
類中調用Do()
方法。 我想您的調用B.Do()
被編譯為A.Do()
(因為B
類不包含Do()
方法聲明)。 這就是為什么您的代碼段返回A
。
為了使您的方法返回B
您應該編寫:
public class A
{
public static void Do()
{
}
}
public class B : A
{
public static void Do()
{
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.