Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何标识正在帮助器类中创建的类对象_C# - Fatal编程技术网

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
的任何构造函数?我已经编辑了我的问题您的代码仍然无法编译<代码>抽象类
有一个名为
实体
的构造函数<未定义代码>IHelper
MyHelper
有一个非构造函数
EntityDataOperation
设置一个私有字段。我通常使用GetType/typeof代码,而是包含一个标识类型的
ItemType
属性(通常是一个枚举)
ClassA
ClassB
可以在ctor中设置它们,因为它们知道它们是什么。我如何知道Helper ClassI中的类型我看不到定义的类型
实体
?我没有看到
ClassA
ClassB
MyHelper
的任何构造函数?我已经编辑了我的问题您的代码仍然无法编译<代码>抽象类有一个名为
实体
的构造函数<未定义代码>IHelper
MyHelper
有一个非构造函数
EntityDataOperation
设置私有字段。