は、この例を考える:動物thisIsACat =新しいCat(); - 暗黙の変換ですか?
Animal thisIsACat = new Cat();
はCat
からAnimal
への暗黙的な変換はありますか?明確にするため
:
は想定:
class Animal
{
}
class Cat: Animal
{
}
は、この例を考える:動物thisIsACat =新しいCat(); - 暗黙の変換ですか?
Animal thisIsACat = new Cat();
はCat
からAnimal
への暗黙的な変換はありますか?明確にするため
:
は想定:
class Animal
{
}
class Cat: Animal
{
}
これは単なるsubtype polymorphismです。
これは暗黙の変換です(仕様では§6.1.6で定義されています)が、変換されるオブジェクトの参照IDは変更されません。
私は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は動物のサブタイプです:型変換、型キャスト、強制変換は、暗黙的にまたは明示的に、あるデータ型のエンティティを別のデータ型に変更することを指します。
オブジェクトはCat
です。 Cat
である - 変数だけがオブジェクト自体ではなくAnimal
としてリストされます。
Cat
オブジェクトを取得して何かを実行すると、今度はAnimal
という異なるオブジェクトが突然現れます。この状況では本当に意味をなさない。
構造体を扱うときは、変換が理にかなっています。 Integer
5はDecimal
5mに変換することができ、2つの全く異なるオブジェクトです。
コード:5 System.Int32
であるが、それは、System.Decimal
ある5M、および元より完全に異なるオブジェクトに変換されるため
int i = 5;
decimal d = i;
は、暗黙の変換であろう。
もちろん変換です。 **コンバージョンは表象を変更する必要はありません。**表象のコンバージョンはまだコンバージョンです。 –
参照変換が変換と見なされることはわかりませんでした。少なくとも私にとってConvertという言葉の実用的な使い方は、参照を変更するだけではなく、一つのオブジェクトを取って変更(変換)することです。しかし、私はそれがすべてあなたの視点にかかっていると思う - 私の視点では、特定のCatオブジェクトは何らかの形で変化したり変換されたりせず、参照のみがオブジェクトであり、オブジェクトはリファレンスではなく重要なものです。しかしそれはちょうど私です... –
いいえ、数字123を含むintを取って、それをuintに変換するとします。それは変換かどうか?ビットはまったく同じです。しかし、あなたがそれらのビットで行うことができる*操作*は異なる*です。それがコンバージョンをコンバージョンにする理由です。ビットが異なっているわけではなく、ビットが異なって振る舞います。 –
@Jason:ありがとう。私が質問を投稿した後、私は前に見たものと似た何かを思い出しました。 CLRはそれが動物だと思っていますが、変換はありません。オブジェクトは1つの型にしかなり得ず、多態的な振る舞いによって型が変更されません.CLRは型のように動作します。変換とは、指定された変換アルゴリズムを使用して、実際に特定のタイプの新しいオブジェクトを作成することを意味します。 :-) – richard
これは多型の例であると私は同意しますが、MSDNでこのメモを見つけました:http://msdn.microsoft.com/en-us/library/ms173105aspx – Dan7el
派生クラスから仕様(§6.1.6)で定義された基本クラスへの暗黙的な参照変換がありますが、変換されるオブジェクトの参照IDを変更しないことに注意してください。 – jason