4

struct以下のような Nodeというタイプがあります。

struct Node
{
    int data;
    Node next; 
}

上記のコードをコンパイルするとコンパイル時エラーが発生しますが、クラスにするとすべて問題ありません。

class Node
    {
        int data;
        Node next; 
    }

2 つの違いは何ですか (私は 1 つが 1 つであることを知っていstruct ( value type )ますclass(ref type )) ?

4

2 に答える 2

4

Cクラスの言語でプログラミングしたことはありますか?クラス/構造体やポインタなどを知っていますか?

その場合は、覚えておいてください。C#では、「クラス」は「ポインターとして」渡されますが、「構造体」は生のバイナリ形式で渡されますが、C /C++の非ポインター非参照と同じようにコピーされます。ネストに関する他のすべての制限は保持され、名前が異なるだけです。

C#では、「クラス」が直接どこにも配置されないため、「クラスX」タイプのフィールドを含む「クラスX」を持つことができます。このようなフィールドは、実際には4/8バイトのポインタ/参照です。'クラスX'のサイズは簡単に決定できます。対照的に、C#では、「structX」タイプのフィールドを含む「structX」を持つことはできません。このようなフィールドは、ポインタ/参照ではなく、外部構造体に直接埋め込まれます。別の「structX」が含まれている場合、「struct X」のサイズはどのくらいになりますか?その定義により、別の「structX」が含まれます。どのように終わりをマークしますか?「newX()」を記述したときに、コンパイラ/ランタイムが割り当てるスペースの量をどのように知るか ?C / C ++の場合と同様に、再帰的にネストされた型を直接作成することはできません(ポインター/参照によってのみ作成できます)。ここで、C#では再帰的な構造体を作成できません。

于 2013-02-11T15:40:28.563 に答える
4

を定義するclassと、Node参照型への参照になりますNode。構造体の場合、構造体のネスト、Nodeつまりノード内のノードの循環ネストがあります。

于 2013-02-11T15:35:47.113 に答える