Computer >> Máy Tính >  >> Lập trình >> C#

Giải thích và đối chiếu các kiểu giá trị và kiểu tham chiếu trong C #

Nói chung, tất cả các loại trong C # có thể được chia thành hai loại chính - loại giá trị loại tham chiếu . Hãy xem xét chi tiết từng loại.

Loại giá trị

Các biến của loại giá trị chứa trực tiếp dữ liệu của chúng. Mỗi biến có bản sao dữ liệu riêng. Do đó, một biến kiểu giá trị không thể sửa đổi một đối tượng khác.

Loại giá trị có thể là một trong các loại sau -

  • tất cả các kiểu số, ví dụ: int, float, gấp đôi
  • ký tự bool các loại
  • struct gõ hoặc
  • liệt kê gõ.

Một kiểu giá trị đơn giản chứa giá trị. Ví dụ:kiểu số nguyên chứa số thực chứ không phải con trỏ tới số, như kiểu tham chiếu.

Để tạo loại giá trị tùy chỉnh, bạn có thể sử dụng cấu trúc. Ví dụ -

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

Trong bộ nhớ, một thể hiện của Điểm được biểu diễn như sau -

Giải thích và đối chiếu các kiểu giá trị và kiểu tham chiếu trong C #

Khi bạn gán một biến kiểu giá trị cho một biến khác, thao tác gán sẽ tạo ra một bản sao của giá trị đang được gán. Ví dụ,

Point p2 = p1;

Giải thích và đối chiếu các kiểu giá trị và kiểu tham chiếu trong C #

Loại tham chiếu

Các biến của kiểu tham chiếu lưu trữ một tham chiếu đến các đối tượng của chúng. Hai biến khác nhau có thể giữ một tham chiếu đến cùng một đối tượng. Bất kỳ thay đổi nào mà một biến thực hiện đối với đối tượng đều hiển thị với biến thứ hai.

Loại tham chiếu bao gồm các loại sau -

  • Chuỗi
  • Lớp
  • Mảng
  • Ủy quyền
  • Giao diện

Ví dụ:bạn có thể tạo một lớp, là một kiểu tham chiếu như sau -

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

Giải thích và đối chiếu các kiểu giá trị và kiểu tham chiếu trong C #

Khi bạn gán một biến kiểu tham chiếu cho một biến khác, thao tác gán chỉ cần sao chép tham chiếu chứ không phải đối tượng thực.

Point p2 = p1;

Giải thích và đối chiếu các kiểu giá trị và kiểu tham chiếu trong C #

Ví dụ

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; }
}

Đầu ra

Value Type
10
20
Reference Type
20
20