結構和類非常相似,今天就來總結下結構和類有什麼區別
1.首先就是語法上的區別,關鍵字的不同(class和struct)
類的語法:
class
student
}
結構的語法:
struct recatangle
}
2.賦值的不同:
類賦初始值:是可以直接賦值的
class
student
}
結構賦初始值:不可以直接賦值 會提示結構中不能例項屬性或字段初始值設定項
struct recatangle
}
既然結構不能直接在字段上面賦值,那麼它怎麼賦值呢?還有乙個東西那就是 建構函式了
回想一下什麼是建構函式, 關於隱式建構函式.在1個類中如果我們沒有為類寫任意的建構函式,那麼c#編譯器在編譯的時候會自動的為這個類生成1個無引數的建構函式.我們將這個建構函式稱之為隱式建構函式 但是一旦我們為這個類寫了任意的1個建構函式的時候,這個隱式的建構函式就不會自動生成了.。
標重點:結構是是在什麼情況下都有隱式建構函式的,所以手動寫建構函式必須是帶引數的建構函式,而且必須要為結構體的所有字段賦值,不能寫無參的建構函式。
3.建構函式的不同:
類:如果不手動寫建構函式的話會自動生成隱式建構函式,如果一旦自己手動寫建構函式的話,隱式的建構函式就沒有了,類的構造函式引數沒有要求。
結構的建構函式:,必須要為結構體的所有字段賦值
結構的建構函式**:
struct recatangle
}
4.建立物件的區別:
結構體建立物件:
1).不需要new直接宣告乙個變數就可以,但是這種方法沒有呼叫建構函式,所以在呼叫之前需要程式設計師自己賦值
**:
namespace structure_結構_
struct recatangle
}class
program
static
intlengthss
(recatangle re)
}}
2).和類一樣,使用new關鍵字來建立,與不使用new關鍵字建立不同的是,通過使用new關鍵字建立結構體物件後,new關鍵字呼叫了建構函式,而結構體建構函式要求必須要為所有的字段賦值.
namespace structure_結構_
struct recatangle
}class
program
static
intlengthss
(recatangle re)
}}
加乙個小知識點:從上面我們可以看出來建構函式的意義,那麼在結構中的方法,在呼叫上又有什麼不同
呼叫機構中的方法:
1.1)在new之後可以直接呼叫
namespace structure_結構_
struct recatangle
public
intarea()
}class
program
static
intlengthss
(recatangle re)
}}
1.2)在不new的情況下,需要賦值之後才可以呼叫結構中的方法
**:
namespace structure_結構_
struct recatangle
public
intarea()
}class
program
}}
5.型別的區別:
結構體是值型別,
類是引用型別
哪什麼時候用到結構,什麼時候用到類呢?(個人觀點)
結構是乙個資料的集合體,所以在需要運算的時候用到結構,例如按鈕的座標
另外也會使用結構. 我們在變數傳值的時候,我就是希望傳遞物件的拷貝,而不是物件的引用位址,那麼這個時候也可以使用結構了.
類用在只是儲存但不做運算的時候
總結到現在基本上就結束了,下面統計了一張表,來區分結構和類的區別
結構和類的區別:
類和結構的區別?
類 類是引用型別在堆上分配,類的例項進行賦值只是複製了引用,都指向同一段實際物件分配的記憶體 類有構造和析構函式 類可以繼承和被繼承 結構 結構是值型別在棧上分配 雖然棧的訪問速度比較堆要快,但棧的資源有限放 結構的賦值將分配產生乙個新的物件。結構沒有建構函式,但可以新增。結構沒有析構函式 結構不可...
類和結構的區別
結構在以下幾個重要方面與類不同 結構是值型別 參見11.3.1小節 所有結構型別都隱式地繼承自類system.valuetype 參見11.3.2小節 對結構型別的變數進行賦值,將建立所賦的值的乙個 副本 參見11.3.3小節 結構的預設值的生成方式為 將所有值型別的域設定為它們的預設值,並將所有引...
結構和類的區別
類是引用型別,是儲存在託管堆中的。通過定義類,我們可以在資料的生存期上得到很高的靈活性,但是也會讓程式的效能有一定的損失。雖然這種損失很小,但當我們只需要定義乙個很小的結構時,用類來定義就有些浪費,對於這樣的問題,c 有相對應的方案來解決,那就是 結構 struct 結構與類的區別 1 結構是值型別...