我有五个班级
class Program
{
static void Main(string[] args)
{
Abstract test = new Child();
test.Exectue();
}
}
public abstract class Abstract
{
public void Exectue()
{
IStrategy strategy = new Strategy();
strategy.GetChildClassName();
}
}
public class Child : Abstract
{
}
public interface IStrategy
{
void GetChildClassName();
}
public class Strategy : IStrategy
{
public void GetChildClassName()
{
???
Console.WriteLine();
}
}
我的问题是,如何从策略类中获取子类的名称(即测试变量的实例)。
执行this.GetType().Name
会产生“策略”,并且
var mth = new StackTrace().GetFrame(1).GetMethod();
var cls = mth.ReflectedType.Name;
产生“摘要”,这不是我想要的。
有什么方法可以获取Child类的名称而无需进行一些怪异的麻烦,例如抛出异常或传递类型。
答案 0 :(得分:1)
我不知道这是否可以满足您的需求,但是您可以将Abstract
类的当前实例发送到Strategy
类的构造函数,然后获取当前的实型名称。
或者,如果您只想发送类的名称而不是整个实例,您也可以这样做。
更新为代码
public abstract class Abstract
{
public void Execute()
{
IValidator validator = new CustomClassValidator(this.GetType().Name);
validator.Validate();
}
}
public interface IValidator
{
void Validate();
}
public class CustomClassValidator : IValidator
{
private string className;
public CustomClassValidator(string className)
{
this.className = className;
}
public void Validate()
{
// make some other validations and throw exceptions
Console.WriteLine(className);
}
}
答案 1 :(得分:0)
public interface IStrategy
{
string GetChildClassName();
}
public class Strategy : IStrategy``
{
public string GetChildClassName()
{
return this.GetType().Name;
}
}