我有一个类,它有一些静态方法。我还有另一个类继承了我的第一个类,如下所示;
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();
答案 0 :(得分:5)
你不能。没有任何名为B.Do()
的内容。它隐含地表示A.Do()
。
Do
是A
中定义的静态方法。 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;
});
})