将对象类型存储在对象中

时间:2018-02-26 08:13:01

标签: c#

假设我有一个父类A和一些子类B1,... Bn。 我想在某个时间点,有一个类型A的对象Bx,可以说:这是一个Bx类。

我的第一个猜测是在类A中添加一个定义每个子类类型的枚举属性,然后在构造子对象时存储这个子类类型:

public enum typeOfChild { B1, B..., Bn };  

public class A {     
    public typeOfChild type;
}

public class B1 : A {
    public B1() 
    {
        type = typeOfChild.B1;
    }
}

// So I can retrieve it later:
B1 Foo = new B1();

// What will happen is that I don't know the type of the child:
A FooA = Foo;

// And now I would like to retrieve this type:
Console.WriteLine(FooA.type); // B1

我需要将此类型作为JSON属性发回。

是否有更好/正确的方法来检索此对象的子类型?

1 个答案:

答案 0 :(得分:2)

假设这些类定义:

public class A {     
}

public class B : A {
}

您可以找到变量的类型(编译时可检测)和实例的类型(仅限运行时):

A a = null;

if(/*user input*/)
{   
   a = new A();
}
else
{
   b = new B();
}

// this results in A, because that's the variable type
typeof(a); 

// this results in either A or B depending on how he "if" went,
// because that's the actual type of the instance
a.GetType();