如何识别Helper类中正在创建的类对象

时间:2017-07-11 23:51:52

标签: c#

我有一个抽象类,它被2个类继承。如何找出在我的助手类中创建的类。

抽象类

public abstract class AbstractClass
{
    private IHelper helper{ get; }
    public Entity()
    {

        helper= new MyHelper(this);
    }
}

MyHelper.cs

public class MyHelper: IHelper
{
    private AbstractClass ABClass{get;}
    public EntityDataOperation(AbstractClass abClass)
    {
       //How can I find out which concrete type it is i.e. ClassA or ClassB
        ABClass= abClass;  
    }
}

ClassA的

    public class ClassA:AbstractClass
    {
        public string data= "ClassA";
    }

ClassB的

    public class ClassB:AbstractClass
    {
        public string data= "ClassB";
    }

2 个答案:

答案 0 :(得分:2)

您可以使用Reflection,但您的代码和方法非常值得怀疑:

entity.GetType().Name;

您还可以测试子类

    if (abClass is ClassA)
        // found is ClassA
    else if (abClass is ClassB)
        // found ClassB

答案 1 :(得分:0)

似乎你的问题归结为“如果我有一个对象,我该如何获得该对象的类型?”

var typeOfTheObject = theObject.GetType();

问题在于,这在很大程度上违背了强类型参数的目的。

这告诉您需要了解的类型:

public EntityDataOperation(AbstractClass abClass)
                             ^^^

告诉你这是什么类型。它是AbstractClass。如果那不是您需要知道的 - 如果您不在乎它是AbstractClass,那么为什么不将参数更改为object

多态性字面意思是“多种形状”。这意味着当你获得AbstractClass的实例时,实际的对象可能是许多形状中的一种 - 该类的许多实现。但是通过采用类型AbstractClass的参数,此方法表明它不关心它是哪种类型。它只是与它所知道的接口 - AbstractClass的方法和属性进行交互,而不知道或关心具体实现是什么。