C# 如何知道静态方法的类名
我有一个类,它有一些静态方法。我还有一个类继承了我的第一个类,如下所示C# 如何知道静态方法的类名,c#,reflection,methodbase,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(); 我使用它如下 public cl
public class Business
{
public static DataTable Get()
{
}
}
public class Model : Business
{
public int ID { get; set; }
public string CompanyName { get; set; }
}
Model.Get();
我使用它如下
public class Business
{
public static DataTable Get()
{
}
}
public class Model : Business
{
public int ID { get; set; }
public string CompanyName { get; set; }
}
Model.Get();
在Do方法内部,我试图捕获模型类的类型。我能抓住下面这样的商务类里面的做方法
public static DataTable Get()
{
Type t = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}
但是我不能理解模型类的类型。我该怎么做
注意:业务类中的Get方法选择从哪个类调用它的列。这就是为什么我需要模型类的名称。模型类的原因名称将是表的名称,它将从表模型中选择列
注2:通常我会像这样使用它
Business.Get<Model>();
Model.Get();
你不能。没有什么叫B.Do。它隐含的意思是A.Do Do是a中定义的静态方法。Do方法中不存在a中定义的B元数据 能够呼叫B.Do;这只是C编译器为您提供的一种方便。请注意,resharper将警告您使用派生类型的基类成员 请注意,即使你写信
B.Do();
编译器将其转换为
call A.Do// Call IL
更新:对于更新后的问题,我建议您使用实例方法,而不是静态方法
Model model = new Model();
model.Get();
在get中,您可以使用GetType.Name来获取当前实例的类名
public class Business
{
public DataTable Get()
{
string className = this.GetType().Name;
}
}
当涉及静态方法时,没有方法继承。 我相信,在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()
{
}
}
我有一个基类,它做一些事情,从哪个类调用它。这就是为什么我需要B类的名称。原因B类的名称将是表的名称,它将从表中选择列B@thrashead我想在获取表名时需要某种多态行为。也许,用你想要达到的目标的更多信息更新这个问题,或者用所有必要的信息问一个新问题来回答这个问题。ThanksI用便条更新了问题。我尝试开发一个类似实体框架的框架,B类是一个有模型成员的类,它继承一个类来获得它的方法。但我不想使用虚拟方法和重写方法。没有什么会被覆盖,我只需要一个表的类型来捕捉成员属性,从而生成一些函数,如select、insert。如果没有看到您的代码,我无法提供太多。我建议去掉那个静态的,让它成为A中的实例方法。然后一个虚拟属性说TableName,它在B中被重写以返回B。或者属性也会有帮助。但是你需要向我们展示更多的代码来帮助我们;如果我这样做,我不需要继承类。我可以把它叫做A.Do;它还为表B创建了select和insert方法。我试着像B.Do一样使用;代替B.做;或A.做;