C# 如何标识正在帮助器类中创建的类对象
我有一个由两个类继承的抽象类。我怎样才能知道在我的助手类中创建了哪个类 抽象类C# 如何标识正在帮助器类中创建的类对象,c#,C#,我有一个由两个类继承的抽象类。我怎样才能知道在我的助手类中创建了哪个类 抽象类 public abstract class AbstractClass { private IHelper helper{ get; } public Entity() { helper= new MyHelper(this); } } public class MyHelper: IHelper { private AbstractClass ABClas
public abstract class AbstractClass
{
private IHelper helper{ get; }
public Entity()
{
helper= new MyHelper(this);
}
}
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;
}
}
MyHelper.cs
public abstract class AbstractClass
{
private IHelper helper{ get; }
public Entity()
{
helper= new MyHelper(this);
}
}
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";
}
您可以使用反射,但您的代码和方法非常值得怀疑:
entity.GetType().Name;
您还可以测试子类
if (abClass is ClassA)
// found is ClassA
else if (abClass is ClassB)
// found ClassB
您可以使用反射,但您的代码和方法非常值得怀疑:
entity.GetType().Name;
您还可以测试子类
if (abClass is ClassA)
// found is ClassA
else if (abClass is ClassB)
// found ClassB
你的问题似乎可以归结为:“如果我有一个对象,我如何得到该对象的类型?” 问题是,这在很大程度上违背了强类型参数的目的 这将告诉您需要了解的类型:
public EntityDataOperation(AbstractClass abClass)
^^^
这会告诉你类型是什么。它是AbstractClass
。如果这不是您需要知道的-如果您不关心它是抽象类
,那么为什么不将参数更改为对象
多态性字面上的意思是“多个形状”。它意味着当你得到一个
AbstractClass
的实例时,实际的对象可能是许多形状中的一个——许多类的实现。但是通过采用类型为AbstractClass
的参数,该方法表示它不关心它是哪种类型。它只与它知道的接口进行交互,即抽象类的方法和属性,而不知道或关心具体的实现是什么。您的问题似乎归结为“如果我有一个对象,我如何获得该对象的类型?”
问题是,这在很大程度上违背了强类型参数的目的
这将告诉您需要了解的类型:
public EntityDataOperation(AbstractClass abClass)
^^^
这会告诉你类型是什么。它是AbstractClass
。如果这不是您需要知道的-如果您不关心它是抽象类
,那么为什么不将参数更改为对象
多态性字面上的意思是“多个形状”。它意味着当你得到一个AbstractClass
的实例时,实际的对象可能是许多形状中的一个——许多类的实现。但是通过采用类型为AbstractClass
的参数,该方法表示它不关心它是哪种类型。它只与它知道的接口进行交互,AbstractClass
的方法和属性,而不知道或关心具体的实现是什么。与使用GetType/typeof代码不同,我通常包括一个标识类型的ItemType
属性(通常是一个枚举)ClassA
和ClassB
可以在ctor中设置它们,因为它们知道它们是什么。我如何知道Helper ClassI中的类型我看不到定义的类型实体
?我没有看到ClassA
或ClassB
或MyHelper
的任何构造函数?我已经编辑了我的问题您的代码仍然无法编译<代码>抽象类
有一个名为实体
的构造函数<未定义代码>IHelperMyHelper
有一个非构造函数EntityDataOperation
设置一个私有字段。我通常使用GetType/typeof代码,而是包含一个标识类型的ItemType
属性(通常是一个枚举)ClassA
和ClassB
可以在ctor中设置它们,因为它们知道它们是什么。我如何知道Helper ClassI中的类型我看不到定义的类型实体
?我没有看到ClassA
或ClassB
或MyHelper
的任何构造函数?我已经编辑了我的问题您的代码仍然无法编译<代码>抽象类有一个名为实体
的构造函数<未定义代码>IHelperMyHelper
有一个非构造函数EntityDataOperation
设置私有字段。