Will GetType() return the most derived type when called from the base class?

前端 未结 3 1403
孤城傲影
孤城傲影 2020-12-23 23:55

Will GetType() return the most derived type when called from the base class?

Example:

public abstract class A
{
    private Type GetInfo()
    {
             


        
相关标签:
3条回答
  • 2020-12-24 00:29

    GetType() will return the actual, instantiated type. In your case, if you call GetType() on an instance of B, it will return typeof(B), even if the variable in question is declared as a reference to an A.

    There is no reason for your GetSubType() method.

    0 讨论(0)
  • 2020-12-24 00:41

    GetType always returns the actual type.

    The reason for it is deep in the .NET framework and CLR, as the JIT and CLR use the .GetType method to create a Type object in memory that holds the information on the object, and all access to the object and compilation are via this Type instance.

    For more information, take a look in the book "CLR via C#" from Microsoft Press.

    0 讨论(0)
  • 2020-12-24 00:47

    GetType always returns the type that was actually instantiated. i.e. the most derived type. This means your GetSubType behaves just like GetType itself and thus is unnecessary.

    To statically get the type information of some type you can use typeof(MyClass).

    Your code has a mistake though: System.Attribute.GetCustomAttributes returns Attribute[] not Type.

    0 讨论(0)
提交回复
热议问题