如何知道静态方法的类名

thr*_*ead 2 c# reflection methodbase

我有一个类,它有一些静态方法.我还有另一个类继承我的第一个类,如下所示;

public class Business
{
    public static DataTable Get()
    {
    }
}

public class Model : Business
{
    public int ID { get; set; }
    public string CompanyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我用它如下;

Model.Get();
Run Code Online (Sandbox Code Playgroud)

在Do方法内部我尝试捕获Model类的类型.我可以在Do方法中捕获下面的Business类类型;

public static DataTable Get()
{    
    Type t = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}
Run Code Online (Sandbox Code Playgroud)

但我无法捕捉到Model类的类型.我怎样才能做到这一点?

注意: Business类中的Get方法选择从哪个类调用它的列.这就是我需要Model类名称的原因.Model类的原因名称将是表的名称,它将从表Model中选择列.

注2:通常我喜欢使用它;

Business.Get<Model>();
Run Code Online (Sandbox Code Playgroud)

我可以从Model表中获取所有数据.但我尝试使用它;

Model.Get();
Run Code Online (Sandbox Code Playgroud)

Sri*_*vel 5

你不能.什么都没有B.Do().它隐含地意味着A.Do().

Do是一个定义的静态方法A.方法中没有B存在元数据,Do因为它的定义A.

能够调用B.Do();只是C#编译器为您提供的便利.请注意,resharper将使用派生类型警告您使用基类成员.

请注意,即使你写

B.Do();
Run Code Online (Sandbox Code Playgroud)

编译器将其转换为

call A.Do// Call IL
Run Code Online (Sandbox Code Playgroud)

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

Model model = new Model();
model.Get();
Run Code Online (Sandbox Code Playgroud)

在里面你可以GetType().Name用来获取当前实例的类名.

public class Business
{
    public DataTable Get()
    {
         string className = this.GetType().Name;
    }
}
Run Code Online (Sandbox Code Playgroud)