2011-06-22 4 views

答えて

9

これは単なるsubtype polymorphismです。

これは暗黙の変換です(仕様では§6.1.6で定義されています)が、変換されるオブジェクトの参照IDは変更されません。

+0

@Jason:ありがとう。私が質問を投稿した後、私は前に見たものと似た何かを思い出しました。 CLRはそれが動物だと思っていますが、変換はありません。オブジェクトは1つの型にしかなり得ず、多態的な振る舞いによって型が変更されません.CLRは型のように動作します。変換とは、指定された変換アルゴリズムを使用して、実際に特定のタイプの新しいオブジェクトを作成することを意味します。 :-) – richard

+0

これは多型の例であると私は同意しますが、MSDNでこのメモを見つけました:http://msdn.microsoft.com/en-us/library/ms173105aspx – Dan7el

+0

派生クラスから仕様(§6.1.6)で定義された基本クラスへの暗黙的な参照変換がありますが、変換されるオブジェクトの参照IDを変更しないことに注意してください。 – jason

0

私はAnimalがインターフェイス(または抽象クラス)であると仮定する必要があります。データ型CatはAnimalインタフェースを実装する必要があります。そうです。new Cat()からAnimalへの暗黙的な変換があります。 AnimalからCatへの変換は明示的でなければなりません。 (Cat)thisIsACat

サブタイプ多型でリソースに読み込むと、次のように表示されます。OriginsThe notion of subtyping in programming languagesは1960年代にさかのぼります。それはSimula誘導体に導入されました。サブタイピングの最初の正式な治療は、1980年にJohn C. Reynoldsによって与えられ、implicit conversionsとLuca Cardelli(1985)を形式化するためにカテゴリ理論を用いた。

具体的には、この場合、AnimalとCatの2種類があります。 Catは動物のサブタイプです:型変換、型キャスト、強制変換は、暗黙的にまたは明示的に、あるデータ型のエンティティを別のデータ型に変更することを指します。

3

オブジェクトはCatです。 Catである - 変数だけがオブジェクト自体ではなくAnimalとしてリストされます。

Catオブジェクトを取得して何かを実行すると、今度はAnimalという異なるオブジェクトが突然現れます。この状況では本当に意味をなさない。

構造体を扱うときは、変換が理にかなっています。 Integer 5はDecimal 5mに変換することができ、2つの全く異なるオブジェクトです。

コード:5 System.Int32であるが、それは、System.Decimalある5M、および元より完全に異なるオブジェクトに変換されるため

int i = 5; 
decimal d = i; 

は、暗黙の変換であろう。

+1

もちろん変換です。 **コンバージョンは表象を変更する必要はありません。**表象のコンバージョンはまだコンバージョンです。 –

+0

参照変換が変換と見なされることはわかりませんでした。少なくとも私にとってConvertという言葉の実用的な使い方は、参照を変更するだけではなく、一つのオブジェクトを取って変更(変換)することです。しかし、私はそれがすべてあなたの視点にかかっていると思う - 私の視点では、特定のCatオブジェクトは何らかの形で変化したり変換されたりせず、参照のみがオブジェクトであり、オブジェクトはリファレンスではなく重要なものです。しかしそれはちょうど私です... –

+2

いいえ、数字123を含むintを取って、それをuintに変換するとします。それは変換かどうか?ビットはまったく同じです。しかし、あなたがそれらのビットで行うことができる*操作*は異なる*です。それがコンバージョンをコンバージョンにする理由です。ビットが異なっているわけではなく、ビットが異なって振る舞います。 –

関連する問題