我有一个抽象类,它被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";
}
答案 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
的方法和属性进行交互,而不知道或关心具体实现是什么。