Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

อธิบายและเปรียบเทียบประเภทค่าและประเภทอ้างอิงใน C#


โดยทั่วไป ทุกประเภทใน C# สามารถแบ่งออกเป็นสองประเภทหลัก - ประเภทค่า และ ประเภทอ้างอิง . มาดูรายละเอียดแต่ละประเภทกันดีกว่า

ประเภทของค่า

ตัวแปรของประเภทค่ามีข้อมูลโดยตรง ตัวแปรแต่ละตัวมีสำเนาข้อมูลของตัวเอง ดังนั้นจึงเป็นไปไม่ได้ที่ตัวแปรประเภทค่าจะแก้ไขวัตถุอื่น

ประเภทค่าสามารถเป็นประเภทใดประเภทหนึ่งดังต่อไปนี้ −

  • ประเภทตัวเลขทั้งหมด เช่น int, float และ สองเท่า
  • อักขระ และ บูล ประเภท
  • โครงสร้าง พิมพ์หรือ
  • การแจงนับ ชนิด

ประเภทค่าแบบง่ายประกอบด้วยค่า ตัวอย่างเช่น ประเภทจำนวนเต็มประกอบด้วยตัวเลขจริง ไม่ใช่ตัวชี้ไปยังตัวเลข เช่น ประเภทอ้างอิง

ในการสร้างประเภทค่าที่กำหนดเอง คุณสามารถใช้โครงสร้าง ตัวอย่างเช่น −

public struct Point
{
public int X;
public int Y;
}
var p1 = new Point();

ในหน่วยความจำ ตัวอย่างของ Point จะแสดงดังนี้ −

อธิบายและเปรียบเทียบประเภทค่าและประเภทอ้างอิงใน C#

เมื่อคุณกำหนดตัวแปรประเภทค่าให้กับตัวแปรอื่น การดำเนินการมอบหมายจะสร้างสำเนาของค่าที่ได้รับมอบหมาย ตัวอย่างเช่น

Point p2 = p1;

อธิบายและเปรียบเทียบประเภทค่าและประเภทอ้างอิงใน C#

ประเภทอ้างอิง

ตัวแปรของประเภทการอ้างอิงจะเก็บข้อมูลอ้างอิงไปยังอ็อบเจ็กต์ของพวกมัน เป็นไปได้ที่ตัวแปร 2 ตัวที่ต่างกันจะเก็บข้อมูลอ้างอิงไปยังอ็อบเจกต์เดียวกัน การเปลี่ยนแปลงใดๆ ที่ตัวแปรหนึ่งทำกับวัตถุจะมองเห็นได้กับตัวแปรที่สอง

ประเภทอ้างอิงประกอบด้วยประเภทต่อไปนี้ -

  • สตริง
  • คลาส
  • อาร์เรย์
  • ผู้รับมอบสิทธิ์
  • อินเทอร์เฟซ

ตัวอย่างเช่น คุณสามารถสร้างคลาสซึ่งเป็นประเภทอ้างอิงได้ดังนี้ −

public class Point{
   public int X;
   public int Y;
}
var p1 = new Point();

อธิบายและเปรียบเทียบประเภทค่าและประเภทอ้างอิงใน C#

เมื่อคุณกำหนดตัวแปรประเภทการอ้างอิงให้กับตัวแปรอื่น การดำเนินการมอบหมายจะคัดลอกข้อมูลอ้างอิงเท่านั้น ไม่ใช่วัตถุจริง

Point p2 = p1;

อธิบายและเปรียบเทียบประเภทค่าและประเภทอ้างอิงใน C#

ตัวอย่าง

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