我正在尝试构建一个可以确定自己类型的基类,但我不知道该怎么做,显然这个.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 ""
}
}
答案 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
。 (您可以认为这已经在编译时解决了。)
你只需要这两个中的一个;您永远不需要合并typeof
和GetType
。因此,在您的情况下,只需Type type = this.GetType();
就可以了。