如何知道静态方法的类名

本文关键字:静态方法 何知道 | 更新日期: 2023-09-27 18:16:30

我有一个类,它有一些静态方法。我还有另一个类继承了我的第一个类,就像下面;

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类类型;

public static DataTable Get()
{    
    Type t = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}

但是我不能捕获Model类类型。我怎么能做到呢?

注意:业务类中的Get方法选择从哪个类调用它的列。这就是为什么我需要模型类的名称。因为Model类的名称将是表的名称,它将从表Model中选择列。

注2:通常我这样使用;

Business.Get<Model>();

和i可以从模型表中获取所有数据。但我试着用它像;

Model.Get();

如何知道静态方法的类名

你不能。没有叫做B.Do()的东西。它隐含地意味着A.Do() .

DoA中定义的静态方法。Do方法中没有B的元数据,因为它是在A中定义的。

能够调用B.Do();只是c#编译器为您提供的方便。注意,resharper会在基类成员使用派生类型时发出警告。

请注意,即使你写

B.Do();

编译器将其转换为

call A.Do// Call IL

Update:对于更新的问题,我建议您使用实例方法,而不是静态方法。

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()
    {
    }
}