私はcomparison of C# and Javaを読んでおり、リストの最初のものは "単一ルート(統一)タイプシステム"です。統合型システムとは何ですか?
シングルルート(統一)タイプのシステムの意味を説明できますか?
私はcomparison of C# and Javaを読んでおり、リストの最初のものは "単一ルート(統一)タイプシステム"です。統合型システムとは何ですか?
シングルルート(統一)タイプのシステムの意味を説明できますか?
C#には統一型システムがあります。 すべてのC#タイプは、intやdoubleなどのプリミティブ型を含み、は単一のルートから継承しますobject
タイプ。クラスオブジェクトとは異なり、これらのプリミティブ型は値型です。それらは個別にヒープ割り当てされず、値渡しされます。
C#値型(プリミティブintやユーザー定義の構造体など)をパラメトリックコレクションに配置すると、ポインタを持たない密集した配列に格納されます。これは可能です。なぜなら、C#では、必要なパラメトリック 'サイズ'ごとにカスタムパラメトリックインスタンシエーションが行われるからです。つまり、C#List<int>
をインスタンス化すると、基になる配列リストにはint型の密にパックされた配列が格納されます。
出典:http://www.pin5i.com/showtopic-24376.html
のJavaもは、いくつかのプリミティブ型(int型、長い、ダブル、バイトなど)をしてい - 彼らはをしている、彼らをオブジェクト指向ではないが、彼らはそれに特別なされています言語自体を使用して定義することはできませんでした。これらは値の型であり、割り当てられたヒープではなく、値によって渡されます。
出典:Comparison of C# and Java - Unified type system(ウィキペディア)
同時に、Javaはまた、しばしばboxed
タイプと呼ばれるオブジェクト指向プリミティブ "ラッパー" タイプ(整数、ロング、ダブル、バイトなど)を、持っています。これらはヒープに割り当てられたオブジェクトであり、参照によって渡され、前述のプリミティブ型と並行して存在します。
Javaのより新しいバージョンでは、必要に応じてプリミティブ型が自動的にオブジェクト型に囲まれます。これにより、管理の負担が軽減されますが、微妙なバグが発生する可能性もあります(auto-boxingも参照してください)。
JavaではC#とは対照的に、組み込みのJDK Collectionsフレームワークは常にオブジェクトポインタのコレクションを管理します。後方互換性のあるパラメトリックにするために、Javaはtype-erasureという技術を実行します。実行時にすべてがコンテナ内のオブジェクトとして扱われます(コンパイル時にパラメータ化された型チェックが実行されます)。
これは、Java List<int>
を作成できないことを意味します。List<Integer>
しか作成できません。上記のリストは、実際にはボックス化されたInteger
オブジェクトへのポインタ配列を格納しています。これは、サイズが2倍であり、C#バージョンよりもパフォーマンスが大幅に劣ります。ほとんどのユースケースでは、このサイズとパフォーマンスの違いは無関係です。
これは実際にはC#でも当てはまりません。オブジェクトの99.9%と同じように、すべての型がオブジェクトから派生するわけではありません。オブジェクトに変換できない非常に奇妙な型が2つあります。 正式にサポートされているのはポインタのみです。 TypedReference、RuntimeArgumentHandleのような3つのサポートされていないものがあります。これらの3つの型は、C++/Cで可変長メソッドとinteropで使用されます。私はあまり心配しないだろう。
この神話の詳細を探るのは神経を壊していた[ここ](https://blogs.msdn.microsoft.com/ericlippert/2009/08/06/not-everything-derives-from-object/) 3番目のサポートされていないタイプを見つけ出すには? Btwの場合でも、ポインターは 'System.IntPtr'または' System.UIntPtr'値型にキャストするまでサポートされません。 – RBT
プログラミング言語が統一型システムを使用していて、プリミティブ型とオブジェクトの両方を持つ大学プロジェクトを一度読んだが、プリミティブ型は隠された継承を持ち、基本オブジェクトとプリミティブ型はサブクラスが隠されたルートのタイプ – umlcat
笑、非常によく知られている音、このプロジェクトに何が起こったのumlcat笑 – brumScouse
@ brumScouse:知らない。私はリンクを失った。カスタムペットプロジェクトで、私が学んだことを適用し始めました。どちらも、JavaとC#はオブジェクトprogだけではありません。私は、オブジェクトオリエンテーションとは独立したプリミティブ型と統一型のシステムを持っていると思います。 – umlcat