簡體   English   中英

如何知道靜態方法的類名

[英]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()

DoA定義的靜態方法。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM