は、C++の構造体とC#の構造体に違いがありますか?クラスとは非常に異なっC#では、C++の構造体とC#の構造体に違いがありますか?
答えて
C#では、構造体を使用して値型を定義します(class
によって宣言された参照型とは異なります)。
C++では、structはデフォルトアクセシビリティレベルがpublic
のクラスと同じです。
C#の構造体はC++のクラスとは異なりますが、C#の構造体から派生することはできません。仮想関数を持つことはできません。デフォルトのコンストラクタを定義することはできません。デストラクタなど
構造体、C++でより
構造体のためStructs vs Classesを参照してくださいメンバーは、デフォルトでは、公開されていることを除いて、クラスと同じです。 それ以外は、C++の構造体はC++クラスができることすべてを行うことができます。
C#の構造体はコンストラクタを持つことができます。 –
マーク:あなたは私の意図的な間違いを見つけました。 。 。 p.s.私はそれを修正しました:) –
@Marc:彼らはいつもデフォルトのコンストラクタを持っています。自分自身を定義することはできません:-) – MartinStettner
はい。 C#で
構造体は、値によって、データの種類(参照によるものであり、OOのものLL持つクラスではなく)デフォルトでは、公開されているだけのクラスであり、C++で
構造体昔ながらのです。
管理対象のC++とC#を相互運用しようとしていますか?もしそうなら、これを可能にするC++への拡張があります:link
C#structはマネージコードです。誰もそれを参照しなくなったときにC#ガベージによって解放されます。そのデストラクタは、ガベージコレクタがクリーンアップを決定するたびに呼び出されます。
C++構造体はアンマネージオブジェクトであり、自分でクリーンアップする必要があります。デストラクタは、削除するときに予測可能に呼び出されるか、範囲外になります。
C#の構造体はオブジェクトではありません。ガベージコレクションの対象となるものではありません(ガベージコレクションされた型のフィールド、つまりクラスでない限り)。 C#構造体はファイナライザを定義できません: "エラー1クラス型のみがデストラクタを含むことができます" –
ファイナライザについての良い点。しかし、構造体は私が考えるオブジェクトです: "MyStruct is object"はtrueを返します。誰かが構造体が使用するメモリを解放しなければなりません。構造体がヒープ上にある場合、ガベージコレクタはこれを行います。 – Andomar
- 1. Cの関数のtypedef構造体と構造体の相違
- 2. C++の構造体内の構造体
- 3. C構造体内の構造体内部の構造体
- 4. 他の構造体を指す構造体ポインタメンバがセグメンテーションフォールト(C/C++)
- 5. C - 構造体
- 6. C構造体
- 7. C#構造体が
- 8. C/C++ - 構造体
- 9. C/C++ qsort構造体内の構造体の配列
- 10. C++のenumと構造体
- 11. C++の構造体とtypdef
- 12. cのポインタと構造体?
- 13. Cの構造体とポインタ
- 14. C#の構造体をCの構造体に変換するには?
- 15. 派生構造体と親構造体へのC++キャスト
- 16. C#コンボボックス構造体
- 17. C++構造体コンストラクタ
- 18. C・ユニオン、構造体
- 19. C - エラー構造体
- 20. C++ - カスタムマトリックス構造体
- 21. 構造体callc c
- 22. Cの構造体は、
- 23. Cの構造体を指す構造体のポインティング・メンバー
- 24. C#クラスと構造体
- 25. C#構造体とNuSOAP(PHP)
- 26. C構造体と配列
- 27. C++:ヌル・ポインタと構造体
- 28. C - mallocと構造体、セグメンテーションフォールバック
- 29. ルアとC構造体
- 30. 異なる構造体内の構造体へのポインタ。 C
C#のstructが値型であるというマーティンの主張は、いくつかの操作でボックス化され、アンボックス化されなければならないため、パフォーマンスにとって非常に重要です。あなたがパフォーマンスについて心配する必要がある場合は、 "ボクシング"をお読みください。 – dss539