简单的问题。为什么表达式typeof(this)
无效C#?还是表达式sizeof(this)
?当我尝试运行一个简短的测试程序时,它会显示Type Expected,然后抛出一堆其他语法错误。我的意思是,typeof
是一个方法(或者你传递参数的关键字,不确定),sizeof
也是一样的,所以为什么this
不是一个有效的参数为了它?我的意思是,你可以使用this
调用很多方法(例如MyMethod(this)
),那么是什么让typeof
和sizeof
变得特别?
在为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
}
}
答案 0 :(得分:10)
我的意思是,typeof是一个方法(或者你传递参数的关键字,不确定)
这是一个操作员,而不是一种方法。他们非常不同。毕竟,你不能在其他任何地方使用类型的名称作为方法参数,是吗?
typeof
和sizeof
都是具有单个操作数的一元运算符,该操作数必须是类型(或类型参数)名称。 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