为什么typeof(this)或sizeof(this)不是有效的?

时间:2013-06-29 21:56:35

标签: c# this

简单的问题。为什么表达式typeof(this)无效C#?还是表达式sizeof(this)?当我尝试运行一个简短的测试程序时,它会显示Type Expected,然后抛出一堆其他语法错误。我的意思是,typeof是一个方法(或者你传递参数的关键字,不确定),sizeof也是一样的,所以为什么this不是一个有效的参数为了它?我的意思是,你可以使用this调用很多方法(例如MyMethod(this)),那么是什么让typeofsizeof变得特别?

在为DependencyProperty之类的内容编写代码段时,这非常有用。例如,查看propa代码段。它必须在那里使用typeof(ownerclass)。如果它可能是typeof(this),那将会好很多。


测试程序:

using System;
public struct TestingClass
{
    public static void Main()
    {
        TestingClass tc = new TestingClass();
        tc.Test();
        Console.ReadKey(true);
    }
    public void Test()
    {
        Console.WriteLine(typeof(this)); //error here
        Console.WriteLine(sizeof(this)); //and here too
    }
}

2 个答案:

答案 0 :(得分:10)

  

我的意思是,typeof是一个方法(或者你传递参数的关键字,不确定)

这是一个操作员,而不是一种方法。他们非常不同。毕竟,你不能在其他任何地方使用类型的名称作为方法参数,是吗?

typeofsizeof都是具有单个操作数的一元运算符,该操作数必须是类型(或类型参数)名称。 this不是类型名称,因此是错误。

我建议您阅读这两个运算符的C#5规范 - typeof运算符在7.6.11节中描述,sizeof运算符在18.5.8节中描述。​​

如果您想知道对象的执行时类型,请调用Object.GetType(),其中 是一种方法:

Type foo = this.GetType();

或隐含this隐含:

Type foo = GetType();

this的编译时类型相同,这是代码出现的类型。

答案 1 :(得分:1)

“this”关键字引用类的当前实例,而typeof要求类型不是实例(“实例”的类型)

Type t = this.GetType();

CIL在方法实现中加载“hidden”参数“this”,它指的是当前类型,并为“this”对象调用默认的基类ctor(这种情况适用于非静态成员)。 / p>

sizeof可以应用于值类型和非托管类型,如指针 请参阅msdn链接 - http://msdn.microsoft.com/en-us/library/eahchzkf(v=vs.100).aspx