我可以从中获得类的类型吗?

时间:2011-01-29 17:26:57

标签: c#

我正在尝试构建一个可以确定自己类型的基类,但我不知道该怎么做,显然这个.GetType不能在typeOf中工作,所以是有没有办法获得当前类的类类型?

class BassClass {
public string GetValueofSomething() {
    Type type = typeof(this.GetType()); //this obviously doesn't work
    type = typeOf(BaseClass);  //works fine
    MemberInfo[] members = type.GetMembers();
    //Other stuff here
    return ""
}
}

4 个答案:

答案 0 :(得分:6)

GetType()返回Type,因此无需typeof

class BassClass
{
     public string GetValueOfSomething()
     {
        Type type = this.GetType();
        MemberInfo[] members = type.GetMembers();
        ...
    }
}

但是你应该真的避免使用反射来访问派生类的成员。声明派生类可以覆盖的抽象或虚拟成员:

class BaseClass
{
     protected virtual string Something
     {
         get { return ""; }
     }

     public string GetValueOfSomething()
     {
         return this.Something;
     }
}

答案 1 :(得分:3)

Type type = this.GetType();
MemberInfo[] members = type.GetMembers();

应该可以正常工作。

答案 2 :(得分:2)

您不需要typeof

Type type = this.GetType();   //gets the actual type of this object

答案 3 :(得分:2)

请注意typeof运算符与System.Object.GetType方法的不同用法:

obj.GetType()

在对象实例GetType上调用

obj并返回该对象的动态(运行时)类型。 (你可以认为这只能在运行时解决。)

typeof(T)

typeof运算符用于类型名称T。 (您可以认为这已经在编译时解决了。)


你只需要这两个中的一个;您永远不需要合并typeofGetType。因此,在您的情况下,只需Type type = this.GetType();就可以了。