0

简单的问题。为什么表达式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
    }
}
4

2 回答 2

10

我的意思是, typeof 是一种方法(或您将参数传递给的关键字,不确定)

它是一个操作符,而不是一个方法。他们非常不同。毕竟,您不能将类型的名称用作其他任何地方的方法参数,对吗?

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

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

如果你想知道一个对象的执行时类型, call Object.GetType(),它确实一个方法:

Type foo = this.GetType();

this隐含:

Type foo = GetType();

的编译时类型不同this,后者是代码出现的类型。

于 2013-06-29T21:59:09.650 回答
1

"this" 关键字是指类的当前实例,typeof 需要类型而不是实例("the" 实例的类型)

Type t = this.GetType();

CIL 在方法实现中加载引用当前类型的“隐藏”参数“this”,并为“this”对象调用默认基类ctor(这发生在非静态成员身上)。

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

于 2013-06-29T22:10:39.877 回答