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)
你不能.什么都没有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)
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |