創建在 stack (由編譯器分配內存空間的,調用構造函數來構造 stack 對象)
不是對 struct 的引用 (直接使用它們)
struct 傳遞的市值而非引用
struct 不可以有初始化
struct MyStruct
{
int myVar = 10; // syntax error.
public void MyFun()
{
// statements
}
}
struct 不可以有明顯的無參數構造器
struct MyStruct
{
int myVar;
public MyStruct() // syntax error.
{
// statements
}
}
struct 不需要實例化
MyStruct aStructObj;
///
/// no exception
///
aStructObj.myVar=100;
struct 不支持繼承和多型,注意:但是 struct 可以像 class 實現接口 (其成員不能使用 protected 或 protected Internal )
struct 構造器必須初始化所有字段
///
/// Error
/// Field 'MyStruct.myString' must be fully assigned before it leaves the constructor
///
struct MyStruct
{
int myInt;
string myString;
public MyStruct( int aInt )
{
myInt = aInt;
}
}
struct 不可以定義析構器
struct 適用於經常使用的數據組合成的新類型
創建在 heap (建立在 heap,類對象只能建立在 ,不能是靜態建立對象,且不濘接條用類得構造函數)
class 實例的引用
class 作為參數傳給一個方法,傳遞的是一個引用
class 可以有初始化
class MyClass
{
int myVar =10; // no syntax error.
public void MyFun()
{
// statements
}
}
class 可以有明顯的無參數構造器
class MyClass
{
int myVar = 10;
public MyClass() // no syntax error.
{
// statements
}
}
class 使用前必須 new 關鍵字實例化
///
/// MyClass aClassObj=new MyClass(); is the correct format.aClassObj.
///
MyClass aClassObj;
///
/// NullReferenceException
/// (because aClassObj does not contain a reference to an object of type myClass).
///
aClassObj.myVar = 100;
class 支持繼承和多型
class 構造器不需要初始化所有字段
///
/// No error
/// No matter whether the Field 'MyClass.myString' is initialized or not
///
class MyClass
{
int myInt;
string myString;
public MyClass( int aInt )
{
myInt = aInt;
}
}
class 可以定義析構器
class 適合大的量和複雜的數據
struct and class
struct 有性能優勢,class 有面向對象的擴展優勢。用於底層數據存儲的類型設計爲struct 類型,將用於定義應用程式列爲的類型設計爲 class。如果對類型將來的應用情況不能確定,應該使用 class。
Ref:
http://jashliao.pixnet.net/blog/post/207253459-c%23-%E4%B8%AD-struct-%E8%88%87-class-%E7%9A%84%E5%8D%80%E5%88%A5%EF%BC%8C%E4%BB%A5%E5%8F%8A%E5%85%A9%E8%80%85%E7%9A%84%E9%81%A9%E7%94%A8%E5%A0%B4
http://www.cnblogs.com/waitrabbit/archive/2008/05/18/1202064.html
https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/classes-and-structs/using-structs
https://read01.com/3RQD6K.html
http://www.cnblogs.com/liuzijing688/archive/2008/01/11/1034893.html
http://weisnote.blogspot.tw/2012/08/static.html
沒有留言:
張貼留言