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 で説明されています。

オブジェクトの実行時の型を知りたい場合は、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 に答える