3 回答
TA贡献1946条经验 获得超3个赞
如果您要寻找与this.GetType()静态方法等效的1衬管,请尝试以下方法。
Type t = MethodBase.GetCurrentMethod().DeclaringType
尽管这可能比仅使用更昂贵typeof(TheTypeName)。
TA贡献1895条经验 获得超7个赞
还有一些其他答案尚未完全弄清,这与您只在执行时可用的类型的想法有关。
如果使用派生类型执行静态成员,则在二进制文件中将省略实类型名称。因此,例如,编译以下代码:
UnicodeEncoding.GetEncoding(0);
现在在其上使用ildasm ...,您将看到发出如下调用:
IL_0002: call class [mscorlib]System.Text.Encoding
[mscorlib]System.Text.Encoding::GetEncoding(int32)
编译器已解决对的调用Encoding.GetEncoding-没有UnicodeEncoding剩余痕迹。恐怕这会使您对“当前类型”的想法变得荒谬。
TA贡献1820条经验 获得超9个赞
另一种解决方案是使用自引用类型
//My base class
//I add a type to my base class use that in the static method to check the type of the caller.
public class Parent<TSelfReferenceType>
{
public static Type GetType()
{
return typeof(TSelfReferenceType);
}
}
然后在继承它的类中,创建一个自引用类型:
public class Child: Parent<Child>
{
}
现在,Parent内部的调用类型typeof(TSelfReferenceType)将获得并返回调用者的Type,而无需实例。
Child.GetType();
-抢
- 3 回答
- 0 关注
- 450 浏览
添加回答
举报