如何知道静态方法的类名
本文关键字:静态方法 何知道 | 更新日期: 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()
.
Do
是A
中定义的静态方法。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()
{
}
}