如何知道静态方法的类名

时间:2015-10-07 12:13:16

标签: c# reflection methodbase

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

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类的类型。我怎么能这样做?

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

注意2:通常我会像使用它一样;

Business.Get<Model>();

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

Model.Get();

2 个答案:

答案 0 :(得分:5)

你不能。没有任何名为B.Do()的内容。它隐含地表示A.Do()

DoA中定义的静态方法。 B方法中没有Do存在A的元数据,因为它在B.Do();中已定义。

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

请注意,即使你写了

call A.Do// Call IL

编译器将其转换为

Model model = new Model();
model.Get();

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

GetType().Name

你可以使用public class Business { public DataTable Get() { string className = this.GetType().Name; } } 来获取当前实例的类名。

protected void Application_Error(object sender, System.EventArgs e)
{
    // custom logger
    IErrorLogger errorLogger = new CustomLogger();

    // config of error handler
    MvcExceptionHandlerConfig config = new MvcExceptionHandlerConfig("Error", "Error", 404, 500);

    // init and handle
    new MvcExceptionHandler.MvcExceptionHandler(this, errorLogger, config).Handle();
}

答案 1 :(得分:0)

在使用Do()方法时,没有方法继承。 我相信只允许在B课程中调用B.Do()方法。我认为您的调用A.Do()已编译为B(因为Do()类不包含A方法声明)。这就是您的代码段返回B

的原因

为了让你的方法返回public class A { public static void Do() { } } public class B : A { public static void Do() { } } ,你应该写:

var app = angular.module('myApp', []);
app.service('myfuncA', function($http){
    return $http.get('lib/data.txt').then(function(datax){
       return datax;
    });
})