获取派生类型类

时间:2018-04-22 19:53:29

标签: c#

所以,我有以下结构:

public abstract class MyBase
{
    public Type TargetType { get; protected set; }
}

public class A : MyBase
{
    public A()
    {
        TargetType = GetType();//Wrong, I need B class type not C
    }
}

public class B : A
{
    public B() { }
}

public class C : B
{
    public C() { }
}

当然,我可以这样接收我的类型:

public class B : A
{
    public B()
    {
        TargetType = typeof(B);
    }
}

实际上,我必须编写一些代码来使示例更清晰:

的Class1.cs

public static Dictionary<Type, Type> MyTypes = new Dictionary<Type, Type>()
{
    { typeof(B),typeof(BView) }
}

public Class1()
{
    C itemC = new C();
    Class2.Initialize(itemC);
}

Class2.cs

public static Initialize(MyBase myBase)
{
    Type t;
    Class1.MyTypes.TryGetValue(myBase.TargetType, out t);
    //I need get BView but I get null because *myBase.TargetType* is C class type
}

关卡结构:

  • 等级0 :( MyBase) - 1个对象
  • 等级1:(A) - 2个物件
  • 等级2:(B) - 100个对象及更多
  • 第3级:(C) - 80个对象及更多

我在括号中给出了这个案例

我将不胜感激任何帮助

2 个答案:

答案 0 :(得分:4)

在对象的任何实例上,您可以调用.GetType()来获取该对象的类型。

您不需要在构造上设置类型

答案 1 :(得分:2)

我完全不了解你的问题,但这些是获取有关类型的信息的一些可能性:

var a = new A();
Console.WriteLine(a.GetType().Name); // Output: A
Console.WriteLine(a.GetType().BaseType?.Name); // Output: MyBase

var b = new B();
Console.WriteLine(b.GetType().Name); // Output: B
Console.WriteLine(b.GetType().BaseType?.Name); // Output: A

// A simple loop to get to visit the derivance chain
var currentType = b.GetType();
while (currentType != typeof(object))
{
    Console.WriteLine(currentType.Name);
    currentType = currentType.BaseType;
}
// Output: B A MyBase

此外,我建议您阅读this post关于GetTypetypeof

之间的区别

希望这有帮助。