標籤:style blog color 使用 資料 ar div line
POINTS
struct為可以包含資料和函數的實值型別
struct為實值型別所以不需要堆(heap)而是在棧(stack)上分配空間
struct將資料直接存在struct中,而class只存參考型別的指標
struct適用於小的資料結構
struct會影響效能
struct可以使用new操作可以調用構造器,但是不會在heap上分配記憶體
struct的構造器只返回struct的值本身(通常分配在stack上)
使用class時,多個變數可以引用同一個對象
使用sturct每個變數都儲存自己的資料拷貝,不會相互影響
struct不支援繼承,sturct繼承自object類型
DEMO
class Program { class PointClass { public int x; public int y; public PointClass(int x, int y) { this.x = x; this.y = y; } } struct PointStruct { public int x; public int y; public PointStruct(int x, int y) { this.x = x; this.y = y; } } static void Main(string[] args) { PointStruct pointStruct = new PointStruct(10, 10); Console.WriteLine("Initial struct values are {0},{1}", pointStruct.x, pointStruct.y); ModifyStructPoint(pointStruct); Console.WriteLine("After ModifyStructPoint, struct values are {0},{1}", pointStruct.x, pointStruct.y); Console.WriteLine(); PointClass pointClass = new PointClass(10, 10); Console.WriteLine("Initial Class values are {0},{1}", pointClass.x, pointClass.y); ModifyClassPoint(pointClass); Console.WriteLine("After ModifyClassPoint, class values are {0},{1}", pointClass.x, pointClass.y); Console.ReadLine(); } private static void ModifyStructPoint(PointStruct pointStruct) { pointStruct.x = 20; pointStruct.y = 20; Console.WriteLine("Modified Valuesare {0},{1}", pointStruct.x, pointStruct.y); } private static void ModifyClassPoint(PointClass pointClass) { pointClass.x = 20; pointClass.y = 20; Console.WriteLine("Modified Valuesare {0},{1}", pointClass.x, pointClass.y); } }