C#.Netにおけるクラスと構造の違い

2564 ワード

一.クラスと構造の例の比較:
構造例:
public struct Person 

{ 

string Name; 

int height; 

int weight 

public bool overWeight() 

{ 

//implement something 

} 

} 


クラスの例:
public class TestTime 

{ 

int hours; 

int minutes; 

int seconds; 

public void passtime() 

{ 

//implementation of behavior 

} 

} 


プロシージャの呼び出し:
public class Test 

{ 

public static ovid Main 

{ 

Person Myperson=new Person //  

TestTime Mytime=New TestTime //  

} 

} 


上記の例から、クラスの宣言と構造の宣言は非常に似ていますが、限定子の後ろにstructがあるかclassがあるかの違いだけでなく、使用時に新しい構造を定義したり、新しいクラスを定義したりする方法も非常に似ています.では、クラスと構造の具体的な違いは何でしょうか.
二.クラスと構造の違い
1.値タイプと参照タイプ
構造は値タイプである:値タイプはスタックにアドレスを割り当て、すべてのベースタイプは構造タイプである:int対応System.int 32の構成でstringはsystemに対応する.string構造、構造を使用することでより多くの値タイプを作成できます
クラスは参照タイプです:参照タイプスタックにアドレスを割り当てます
スタックの実行効率はスタックの実行効率よりも高いが,スタックのリソースは限られており,大きな論理的複雑なオブジェクトを処理するのに適していない.したがって、構造処理はベースタイプとして扱われる小さなオブジェクトであり、クラスはビジネスロジックを処理する.
構造は値タイプであるため、構造間の付与は新しい構造を作成できますが、クラスは参照タイプであり、クラス間の付与は参照をコピーするだけです.
注意:
1.構造はクラスのタイプとは異なるが、ベースタイプはオブジェクト(object)であり、c#のすべてのタイプのベースタイプはobjectである
2.構造の初期化にはNewオペレータも使用されていますが、構造オブジェクトはスタックではなくスタックに割り当てられています.「新規」(new)を使用しない場合、すべてのフィールドを初期化する前に、フィールドは割り当てられていない状態を維持し、オブジェクトは使用できません.
2.継承性
構造:別の構造やクラスから継承することはできず、それ自体も継承することはできない.構造は明確にsealedで宣言されていないが、構造は暗黙的なsealedである.
クラス:完全に拡張可能で、表示された宣言sealedを除いて、クラスは他のクラスとインタフェースを継承することができ、自身も継承することができます.
[NextPage]
注意:構造は継承できませんが、構造はインタフェースを継承できます.方法はクラス継承インタフェースと同じです.
例:構造実装インタフェース
interface IImage

{

void Paint();

}

struct Picture : IImage

{

public void Paint()

{

// painting code goes here

}

private int x, y, z; // other struct members

}


3.内部構造:
構造:
デフォルトのコンストラクション関数はありませんが、コンストラクション関数を追加できます.
解析関数なし
abstractとsealedはありません(継承できないため)
protected修飾子は使用できません
new初期化を使用せずに
構造内のインスタンスフィールドの初期化はエラーです
クラス:
デフォルトのコンストラクション関数
こうぞうかんすう
abstractとsealedを使用できます
protected修飾子あり
new初期化を使用する必要があります
三.構造かクラスかをどのように選択するか
構造とクラスの共通点と相違点を議論した後、構造とクラスのどちらを選択するかについて説明します.1.スタックの空間は限られており、大量の論理オブジェクトに対して、構造を作成するよりもクラスを作成するほうがいいです.
2.構造は、点、長方形、色などの軽量オブジェクトを表します.たとえば、1000個の点オブジェクトを含む配列を宣言すると、
[NextPage]
参照オブジェクトごとに追加のメモリが割り当てられます.この場合、構造のコストは低くなります.
3.抽象とマルチレベルのオブジェクト階層を表現する場合、クラスが最適です.
4.ほとんどの場合、このタイプはいくつかのデータにすぎない場合、構造時に最適な選択