3

私はキャスティングに完全に精通していません。ですから、私の質問に対する変更を編集またはコメントしてください。

インターフェイスを実装するクラスがあるとしましょう。

public class Class1: Interface1
{
}

これら2つの違いは何ですか?:

Interface1 myObject = new Class1();

Class1 myClassObject = new Class1();
Interface1 myObject = (Interface1) myClassObject;

最初のものも鋳造の形ですか?

編集:

それぞれが何をしますか?

4

3 に答える 3

5

最初のものは確かに暗黙のキャストです。マイクロソフトを引用するには:

参照型の場合、クラスからその直接的または間接的な基本クラスまたはインターフェイスのいずれかへの暗黙的な変換が常に存在します。派生クラスには常に基本クラスのすべてのメンバーが含まれるため、特別な構文は必要ありません。

2 番目のキャストは明示的な変換であり、既に述べたように、上記の理由から必要ありません。明示的な変換は、キャスト中に一部の情報が失われる可能性がある場合に必要であり、コンパイラーにその処理方法を指示します。

Microsoft には、キャストに関する優れた記事があります: http://msdn.microsoft.com/en-us/library/ms173105.aspx

于 2013-03-08T08:53:06.937 に答える
2

1つ目は、Class1がInterface1を実装しているため、ポリモーフィズム機能です(ただし、暗黙のキャストです)。2つ目は明示的なキャストであり、MyClass1はすでにInterface1であるため必須ではありません(言うまでもなく)。

于 2013-03-08T08:44:54.757 に答える
1

概念がポリモーフィズムと呼ばれる最初のケース

コンピュータサイエンスでは、ポリモーフィズムはプログラミング言語の機能であり、さまざまなデータ型の値を統一されたインターフェイスを使用して処理できます。パラメトリック多相の概念は、データ型と関数の両方に適用されます。さまざまなタイプの値に評価または適用できる関数は、ポリモーフィック関数と呼ばれます。一般化されたタイプのように見えるデータ型(たとえば、任意のタイプの要素を持つリスト)は、そのような特殊化が行われる一般化されたタイプと同様に、ポリモーフィックデータ型として指定されます。

于 2013-03-08T08:45:01.477 に答える