如何知道静态方法的 Class 名称
How to Know Static Methods's Class Name
我有一个 class,它有一些静态方法。我还有另一个 class 继承了我的第一个 class,如下所示;
public class Business
{
public static DataTable Get()
{
}
}
public class Model : Business
{
public int ID { get; set; }
public string CompanyName { get; set; }
}
我是这样用的;
Model.Get();
在 Do 方法内部,我尝试捕捉模型的类型 class。我可以在 Do 方法中捕获如下所示的业务 class 类型;
public static DataTable Get()
{
Type t = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}
但我无法捕捉到模型 class 类型。我该怎么做?
注意: 在业务 class selects 列中获取方法,从中调用它 class。这就是为什么我需要模型名称 class。模型 class 的原因名称将是 table 的名称,并且它将 table 模型中的 select 列。
注2 :一般我都这样用;
Business.Get<Model>();
我可以从模型 table 中获取所有数据。但我试着像这样使用它;
Model.Get();
你不能。没有什么叫做B.Do()
。它隐含地意味着 A.Do()
.
Do
是A
中定义的静态方法。 Do
方法中不存在 B
的元数据,因为它在 A
中定义。
能够调用B.Do();
只是C#编译器为您提供的便利。请注意,resharper 会警告您使用派生类型使用 base class 成员。
请注意,即使您写
B.Do();
编译器将其转换为
call A.Do// Call IL
更新:至于更新的问题,我建议您使用实例方法而不是静态方法。
Model model = new Model();
model.Get();
在 get 内部你可以使用 GetType().Name
来获取当前实例的 class 名称。
public class Business
{
public DataTable Get()
{
string className = this.GetType().Name;
}
}
static
方法时没有方法继承。
在 B
class 中调用 Do()
方法只是为了方便,我相信。我想你的调用 B.Do()
被编译为 A.Do()
(因为 B
class 不包含 Do()
方法声明)。这就是为什么您的代码段 returns A
.
为了让你的方法 return B
你应该写:
public class A
{
public static void Do()
{
}
}
public class B : A
{
public static void Do()
{
}
}
我有一个 class,它有一些静态方法。我还有另一个 class 继承了我的第一个 class,如下所示;
public class Business
{
public static DataTable Get()
{
}
}
public class Model : Business
{
public int ID { get; set; }
public string CompanyName { get; set; }
}
我是这样用的;
Model.Get();
在 Do 方法内部,我尝试捕捉模型的类型 class。我可以在 Do 方法中捕获如下所示的业务 class 类型;
public static DataTable Get()
{
Type t = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}
但我无法捕捉到模型 class 类型。我该怎么做?
注意: 在业务 class selects 列中获取方法,从中调用它 class。这就是为什么我需要模型名称 class。模型 class 的原因名称将是 table 的名称,并且它将 table 模型中的 select 列。
注2 :一般我都这样用;
Business.Get<Model>();
我可以从模型 table 中获取所有数据。但我试着像这样使用它;
Model.Get();
你不能。没有什么叫做B.Do()
。它隐含地意味着 A.Do()
.
Do
是A
中定义的静态方法。 Do
方法中不存在 B
的元数据,因为它在 A
中定义。
能够调用B.Do();
只是C#编译器为您提供的便利。请注意,resharper 会警告您使用派生类型使用 base class 成员。
请注意,即使您写
B.Do();
编译器将其转换为
call A.Do// Call IL
更新:至于更新的问题,我建议您使用实例方法而不是静态方法。
Model model = new Model();
model.Get();
在 get 内部你可以使用 GetType().Name
来获取当前实例的 class 名称。
public class Business
{
public DataTable Get()
{
string className = this.GetType().Name;
}
}
static
方法时没有方法继承。
在 B
class 中调用 Do()
方法只是为了方便,我相信。我想你的调用 B.Do()
被编译为 A.Do()
(因为 B
class 不包含 Do()
方法声明)。这就是为什么您的代码段 returns A
.
为了让你的方法 return B
你应该写:
public class A
{
public static void Do()
{
}
}
public class B : A
{
public static void Do()
{
}
}