22
int a = 2;

Console.WriteLine(a.ToString()); // displays 2

// definition of ToString() here - public override string ToString();

さて、ここに私の理解のいくつかがあります:

  1. .net のすべてのクラスはToString()、クラスから継承されるメソッドを取得しObjectます。
  2. クラスまたは別の構造体から構造体を派生させることはできません。intは type の構造体で、実装するインターフェースからいくつかの [With Parameters] メソッドInt32を取得します。ToString()
  3. ToString()struct には [without params] 関数もありますInt32

http://msdn.microsoft.com/en-us/library/system.int32.tostring.aspxによると、

struct Int32 は ValueType.ToString() メソッドをオーバーライドします

構造体が一部のクラスまたは構造体を継承できない場合、このToString()メソッドがどのように利用できるか説明していただけますInt32か?

4

3 に答える 3

34

構造体が一部のクラスまたは構造体を継承できない場合、

これは正しくありません。System.Int32すべての構造体 (および 、 などの組み込みの値型System.Single) は常に暗黙的に継承しSystem.ValueTypeます (さらに、 から継承しSystem.Objectます)。

ただし、他のものから継承する構造体を作成することはできませ

これは、C# 言語仕様 4.1.1 で明確に説明されています。

4.1.1 System.ValueType タイプ

すべての値型はクラス System.ValueType から暗黙的に継承され、クラス オブジェクトから継承されます。値型から型を派生させることはできません。したがって、値型は暗黙的にシールされます (§10.1.1.2)。

次に、後で (4.1.3) struct が明示的に値型として定義されます。

4.1.3 構造体型

構造体型は、定数、フィールド、メソッド、プロパティ、インデクサー、演算子、インスタンス コンストラクター、静的コンストラクター、および入れ子にされた型を宣言できる値型です。

于 2012-05-23T20:16:06.080 に答える
1

ValueType から派生した型のすべての定義は、実際には実行時に 2 つの異なる種類のものを定義します: ヒープ オブジェクトの型 ( から派生し、 から派生しValueTypeObject型情報が埋め込まれています) と、格納場所の型 (埋め込み型情報は含まれませんが、代わりに、それを使用するコードには、それが何であるかを知るための他の手段が必要です)。ヒープ オブジェクト タイプのインスタンスには、ストレージ ロケーション タイプのフィールドと、アクセスを試みるコードが含まれます。thisそのフィールドにアクセスします。値型が参照型の格納場所に暗黙的または明示的にキャストされる場合、システムは適切な型で新しいヒープ オブジェクトを作成し、値型のすべてのパブリック フィールドとプライベート フィールドをヒープ オブジェクト内の対応するフィールドにコピーします。ヒープ オブジェクトが値型の格納場所にキャストされる場合、ヒープ オブジェクトのすべてのパブリック フィールドとプライベート フィールドが値型の格納場所にコピーされます。

値型のヒープ オブジェクトでいずれかまたはインターフェイス メソッドを使用しようとするとObject、そのメソッドは他のヒープ オブジェクト メソッドと同様に呼び出されます。値型の格納場所で試行が行われた場合、 以外のメソッドの場合GetType、コンパイラは特別な「制約付き」オペコードを生成します。これは、ランタイムに格納場所の型を通知し、ランタイムにそのアドレスを呼び出すように指示します。そのタイプに適した方法。コンパイラは格納場所のタイプを使用できるようになり、ランタイムはそれを使用して適切なメソッドを見つけることができるため、最初に新しいヒープ オブジェクトを作成しなくても、格納場所で適切なメソッドを直接呼び出すことができます。 GetType注目すべき例外の 1 つです。オブジェクト内に埋め込まれた型情報を調べることによって機能するため、型情報が埋め込まれたものに対してのみ機能します。したがって、その引数は呼び出し前にヒープ オブジェクト形式に変換されます。GetTypeその後、そのヒープ オブジェクトの埋め込み型情報を調べることができます。

于 2012-10-08T15:53:34.420 に答える
1

Int32メソッドIFormattableを定義するimplementsToString

于 2012-05-23T20:17:23.467 に答える