C# - C Sharp: Truy cập các trường và phương thức của đối tượng


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Mỗi đối tượng (object) hay thể hiện có hai loại thành phần cơ bản là trường và phương thức. Các trường định nghĩa các đặc điểm của một đối tượng đã tạo từ lớp và còn được gọi là các biến thể hiện. Các phương thức được sử dụng để thực thi các hành vi của các đối tượng và còn được gọi là các phương thức thể hiện.

Truy cập các trường của đối tượng

Cú pháp khai báo chi tiết một trường trong khi tạo lớp là như sau:

[bổ_từ_truy_cập] kiểu_dữ_liệu tên_trường;

trong đó,

bổ_từ_truy_cập: Là một từ khóa tùy chọn xác định mức độ truy cập của một trường, nó có thể là privateprotected, internal hoặc public. Trường hợp ta không đưa vào bổ từ truy cập thì bổ từ truy cập mặc định sẽ là private. Xem chi tiết về bổ từ truy cập tại phần Các mức khả năng truy cập.

kiểu_dữ_liệu: Xác định kiểu dữ liệu của trường.

tên_trường: Xác định tên của trường.

Các trường được khai báo theo cách tương tự với các biến cục bộ, nhưng phải nằm bên ngoài bất kỳ một định nghĩa phương thức nào.

Để truy cập vào trường của đối tượng ta sử dụng toán tử dấu chấm (.).

Ví dụ sau đây thể hiện việc tạo một đối tượng có tên cat trong phương thức Main(), sau đó sử dụng toán tử (.) để truy cập vào các trường của nó.

namespace ConsoleApp1
{
 //tạo lớp Animal:
 class Animal
 {
  //khai báo các trường:
  public int id; //mã nhận diện
  public string name; //tên
  public float age; //tuổi
 }

 //tạo lớp TestAnimal chứa phương thức Main()
 class TestAnimal
 {
  static void Main(string[] args)
  {
   Animal cat = new Animal(); //tạo 1 đối tượng tên cat
   cat.id = 1234; //truy cập để thiết lập (set) giá trị cho trường id
   Console.WriteLine("ID của cat là: " + cat.id);//truy cập để lấy (get) thông tin của id
   cat.name = "Moon";
   Console.WriteLine("Name: " + cat.name);
   cat.age = 1.5f;
   Console.WriteLine("Age: " + cat.age);
  }
 }
}

Truy cập các phương thức của đối tượng

Các phương thức thể hiện là các hàm được khai báo trong một lớp và được sử dụng để giải quyết các hoạt động hay hành vi trên các đối tượng.

Những quy ước sau đây cần phải được tuân theo trong khi đặt tên cho một phương thức:

- Không được là từ khóa C#.

- Không được chứa dấu cách.

- Không được bắt đầu bằng số.

- Có thể bắt đầu bằng ký tự gạch dưới, hoặc ký tự '@'.

- Nên là một động từ hoặc cụm động từ thể hiện hanh vi tương ứng của đối tượng.

- Nên có tính mô tả và có ý nghĩa.

- Tên nên có nhiều từ với tất cả các từ đều bắt đầu bằng chữ in hoa, các từ sau là tính từ, danh từ, ... Ví dụ như NhapLieu(), HienThiThongTin(), TinhTong(), TinhBietThucDelta().

Cú pháp chi tiết định nghĩa một phương thức thể hiện trong một lớp là như sau:

[bổ_từ_truy_cập] kiểu_trả_về tên_phương_thức ([danh_sách_tham_số]) {
  // Thân của phương thức
  //[return giá_trị;]
}

trong đó,

bổ_từ_truy_cập: Xác định mức truy cập của một phương thức thể hiện.

kiểu_trả_về: Xác định kiểu dữ liệu của giá trị mà được trả về bởi phương thức.

tên_phương_thức: Là tên phương thức.

danh_sách_tham_số: Dùng để tiếp nhận dữ liệu cho phương thức.

return giá_trị;: Nếu kiểu_trả_về là void thì không có câu lệnh này hoặc câu lệnh sẽ viết là return;, nếu kiểu_trả_về khác void thì bắt buộc phải có lệnh này, trong đó giá_trị phải có kiểu tương đương hoặc nhỏ hơn kiểu_trả_về.

Mỗi thể hiện của lớp có các biến thể hiện của chính nó, nhưng các phương thức thể hiện được chia sẻ bởi tất cả các thể hiện của lớp trong quá trình thực thi.

Một phương thức của đối tượng có thể truy cập các trường của đối tượng đó.

Để truy cập các phương thức của một đối tượng ta sử dụng toán tử (.).

Ví dụ sau thể hiện cách định nghĩa các phương thức thể hiện của lớp Animal, sau đó tạo một đối tượng cat trong phương thức Main() rồi dùng toán tử (.) để truy cập các phương thức của đối tượng đó.

namespace ConsoleApp1
{
 //tạo lớp Animal:
 class Animal
 {
  //khai báo các trường:
  int id; //mã nhận diện
  string name; //tên
  float age; //tuổi

  //định nghĩa phương InputInfo()
  //để nhập thông tin cho các trường:
  public void InputInfo()
  {
   Console.Write("Input id: ");
   id = int.Parse(Console.ReadLine());
   Console.Write("Input name: ");
   name = Console.ReadLine();
   Console.Write("Input age: ");
   age = float.Parse(Console.ReadLine());
  }

  //định nghĩa phương thức ShowInfo()
  //để hiển thị thông tin đối tượng:
  public void ShowInfo()
  {
   Console.WriteLine($"ID: {id}");
   Console.WriteLine($"Name: {name}");
   Console.WriteLine($"Age: {age}");
  }
 }

 //tạo lớp TestAnimal chứa phương thức Main()
 class TestAnimal
 {
  static void Main(string[] args)
  {
   Animal cat = new Animal(); //tạo 1 đối tượng tên cat
   cat.InputInfo();//truy cập phương thức InputInfo() để nhập thông tin cho cat
   cat.ShowInfo();//truy cập phương thức ShowInfo() để hiển thị thôn tin cho cat
  }
 }
}

Kết quả thực thi:

Input id: 1234
Input name: Moon
Input age: 2.5
ID: 1234
Name: Moon
Age: 2.5

Vì các phương thức là một phần của khai báo lớp, nên chúng có thể truy cập các thành phần khác của lớp, chẳng hạn như các biến thể hiện và các phương thức khác của lớp.

Lưu ý rằng khi lớp Animal được biên dịch thì trình biên dịch sẽ đặt nó trong một tập tin có tên là Animal.class. Lớp này không thể được thực thi vì không có sự hiện diện của phương thức Main() trong nó.

Gọi (calling) một phương thức

Như vậy là ta có thể truy cập một phương thức của lớp bằng cách tạo một đối tượng của lớp. Để gọi một phương thức, ta sử dụng tên đối tượng, theo sau là toán tử dấu chấm (.) và sau đó là tên phương thức muốn gọi.

Trong C#, một phương thức luôn luôn được gọi từ một phương thức khác. Phương thức gọi phương thức khác thì được gọi là phương thức calling. Phương thức được gọi thì gọi là phương thức called. Sau khi thực thi tất cả các câu lệnh trong khối lệnh của phương thức called, thì quyền điều khiển sẽ được trả lại cho phương thức calling.

Phần lớn các phương thức được gọi từ phương thức Main() của lớp, đó là đầu vào (entry point) của việc thực thi chương trình.

Ví dụ dưới đây định nghĩa một lớp có tên PhuongTrinhBac2 gồm:

- Các trường a, b, c kiểu float thể hiện các hệ số a, b, c của phương trình bậc 2.

- Phương thức NhapCacHeSo() để nhập liệu cho các trường a, b, c.

- Phương thức TinhBietThucDelta() để tính và trả về biệt thức delta.

- Phương thức XacDinhNghiem() dùng để xác định nghiệm, trong đó có lời gọi (calling) đến phương thức (called) TinhBietThucDelta() để lấy giá trị của delta.

- Tạo một lớp có tên TestPhuongTrinhBac2 chứa phương thức Main() để kiểm thử cho lớp PhuongTrinhBac2.

Chương trình được viết như sau:

namespace ConsoleApp1
{
 public class PhuongTrinhBac2
 {
  float a;
  float b;
  float c;

  public void NhapCacHeSo()
  {
   Console.Write("Input a: ");
   a = float.Parse(Console.ReadLine());
   Console.Write("Input b: ");
   b = float.Parse(Console.ReadLine());
   Console.Write("Input c: ");
   c = float.Parse(Console.ReadLine());
  }

  public double TinhBietThucDelta()
  {
   return b * b - 4 * a * c;
  }

  public void XacDinhNghiem()
  {
   if (a == 0)
   {
    if (b == 0)
    {
     if (c == 0)
     {
      Console.WriteLine("Phuong trinh co vo so nghiem!");
     }
     else
     {
      Console.WriteLine("Phuong trinh vo nghiem!");
     }
    }
    else
    {
     Console.WriteLine("Phuong trinh co 1 nghiem, x = " + (-c / b));
    }
   }
   else
   {
    double delta = TinhBietThucDelta();//có lời gọi (calling) đến phương thức khác
    if (delta < 0)
    {
     Console.WriteLine("Phuong trinh vo nghiem!");
    }
    else if (delta == 0)
    {
     Console.WriteLine($"Phuong trinh co nghiem kep, x1 = x2 = {(-b / (2 * a))}");
    }
    else
    {
     Console.WriteLine("Phuong trinh co 2 nghiem phan biet:");
     Console.WriteLine($"x1 = {(-b + Math.Sqrt(delta)) / (2 * a)}");
     Console.WriteLine($"x2 = {(-b - Math.Sqrt(delta)) / (2 * a)}");
    }
   }
  }
 }

 class TestPhuongTrinhBac2
 {
  static void Main(string[] args)
  {
   PhuongTrinhBac2 objPTB2 = new PhuongTrinhBac2();
   objPTB2.NhapCacHeSo();
   objPTB2.XacDinhNghiem();
  }
 }
}

Kết quả ví dụ:

Input a: 1
Input b: 3
Input c: 2
Phuong trinh co 2 nghiem phan biet:
x1 = -1
x2 = -2

Trong chương trình trên, một đối tượng objPTB2 có kiểu lớp PhuongTrinhBac2 được tạo trong phương thức Main().

» Tiếp: Hàm tạo (Constructor)
« Trước: Lớp (class) và đối tượng (object)
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!