为了账号安全,请及时绑定邮箱和手机立即绑定

如何从主调用者类中获取孩子的类名

如何从主调用者类中获取孩子的类名

C#
噜噜哒 2023-04-16 09:57:22
我有五个班级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();    }}我的问题是,如何从 Strategy 类中获取子类的名称(即测试变量的实例)。这样做this.GetType().Name会产生“策略”,并且var mth = new StackTrace().GetFrame(1).GetMethod();var cls = mth.ReflectedType.Name; 产生“摘要”,这不是我想要的。有什么方法可以让我在不做一些奇怪的 hax 的情况下获得 Child 类的名称,比如抛出异常或传递类型。
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

我不知道这是否会满足您的需求,但您可以将类的当前实例发送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);

    }

}


查看完整回答
反对 回复 2023-04-16
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

public interface IStrategy

{

    string GetChildClassName();

}


public class Strategy : IStrategy

{

    public string GetChildClassName()

    {

        return this.GetType().Name;

    }

}


查看完整回答
反对 回复 2023-04-16
  • 2 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信