โดยทั่วไป ทุกประเภทใน 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