为了账号安全,请及时绑定邮箱和手机立即绑定

.NET:以其静态方法确定“此类”的类型

.NET:以其静态方法确定“此类”的类型

桃花长相依 2019-11-30 09:58:43
在非静态方法中,我可以使用this.GetType()并且它将返回Type。如何通过Type静态方法获得相同的信息?当然,我不能只写,typeof(ThisTypeName)因为ThisTypeName仅在运行时才知道。谢谢!
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

如果您要寻找与this.GetType()静态方法等效的1衬管,请尝试以下方法。


Type t = MethodBase.GetCurrentMethod().DeclaringType

尽管这可能比仅使用更昂贵typeof(TheTypeName)。


查看完整回答
反对 回复 2019-11-30
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

还有一些其他答案尚未完全弄清,这与您只在执行时可用的类型的想法有关。


如果使用派生类型执行静态成员,则在二进制文件中将省略实类型名称。因此,例如,编译以下代码:


UnicodeEncoding.GetEncoding(0);

现在在其上使用ildasm ...,您将看到发出如下调用:


IL_0002:  call       class [mscorlib]System.Text.Encoding 

[mscorlib]System.Text.Encoding::GetEncoding(int32)

编译器已解决对的调用Encoding.GetEncoding-没有UnicodeEncoding剩余痕迹。恐怕这会使您对“当前类型”的想法变得荒谬。


查看完整回答
反对 回复 2019-11-30
?
慕妹3146593

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();

-抢


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 450 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信