โดยทั่วไป ทุกประเภทใน C# สามารถแบ่งออกเป็นสองประเภทหลัก - ประเภทค่า และ ประเภทอ้างอิง . มาดูรายละเอียดแต่ละประเภทกันดีกว่า
ประเภทของค่า
ตัวแปรของประเภทค่ามีข้อมูลโดยตรง ตัวแปรแต่ละตัวมีสำเนาข้อมูลของตัวเอง ดังนั้นจึงเป็นไปไม่ได้ที่ตัวแปรประเภทค่าจะแก้ไขวัตถุอื่น
ประเภทค่าสามารถเป็นประเภทใดประเภทหนึ่งดังต่อไปนี้ −
- ประเภทตัวเลขทั้งหมด เช่น int, float และ สองเท่า
- อักขระ และ บูล ประเภท
- โครงสร้าง พิมพ์หรือ
- การแจงนับ ชนิด
ประเภทค่าแบบง่ายประกอบด้วยค่า ตัวอย่างเช่น ประเภทจำนวนเต็มประกอบด้วยตัวเลขจริง ไม่ใช่ตัวชี้ไปยังตัวเลข เช่น ประเภทอ้างอิง
ในการสร้างประเภทค่าที่กำหนดเอง คุณสามารถใช้โครงสร้าง ตัวอย่างเช่น −
public struct Point { public int X; public int Y; } var p1 = new Point();
ในหน่วยความจำ ตัวอย่างของ Point จะแสดงดังนี้ −
เมื่อคุณกำหนดตัวแปรประเภทค่าให้กับตัวแปรอื่น การดำเนินการมอบหมายจะสร้างสำเนาของค่าที่ได้รับมอบหมาย ตัวอย่างเช่น
Point p2 = p1;
ประเภทอ้างอิง
ตัวแปรของประเภทการอ้างอิงจะเก็บข้อมูลอ้างอิงไปยังอ็อบเจ็กต์ของพวกมัน เป็นไปได้ที่ตัวแปร 2 ตัวที่ต่างกันจะเก็บข้อมูลอ้างอิงไปยังอ็อบเจกต์เดียวกัน การเปลี่ยนแปลงใดๆ ที่ตัวแปรหนึ่งทำกับวัตถุจะมองเห็นได้กับตัวแปรที่สอง
ประเภทอ้างอิงประกอบด้วยประเภทต่อไปนี้ -
- สตริง
- คลาส
- อาร์เรย์
- ผู้รับมอบสิทธิ์
- อินเทอร์เฟซ
ตัวอย่างเช่น คุณสามารถสร้างคลาสซึ่งเป็นประเภทอ้างอิงได้ดังนี้ −
public class Point{ public int X; public int Y; } var p1 = new Point();
เมื่อคุณกำหนดตัวแปรประเภทการอ้างอิงให้กับตัวแปรอื่น การดำเนินการมอบหมายจะคัดลอกข้อมูลอ้างอิงเท่านั้น ไม่ใช่วัตถุจริง
Point p2 = p1;
ตัวอย่าง
using System; class Program{ static void Main(){ var p1 = new Point { X = 10 }; Point p2 = p1; p2.X = 20; Console.WriteLine("Value Type"); Console.WriteLine(p1.X); Console.WriteLine(p2.X); var u1 = new User { Age = 10 }; User u2 = u1; u2.Age = 20; Console.WriteLine("Reference Type"); Console.WriteLine(u1.Age); Console.WriteLine(u2.Age); } } public struct Point{ public int X; public int Y; } public class User{ public int Age { get; set; } }
ผลลัพธ์
Value Type 10 20 Reference Type 20 20