Properties và Indexers trong C# (Bài 7)

Properties và indexers trong C# sẽ giới thiệu đến bạn đọc về mục địch sử dụng của properties, cách sử dụng của nó; mục đích và cách sử dụng của indexers. Qua đó các bạn sẽ hiểu và biết cách vận dụng properties và indexers để giải quyết những yêu cầu thực tế.

Properties và indexers trong C# – Properties

Properties được sử dụng để truy cập các thuộc tính với quyền truy cập là private bằng cách hỗ trợ đọc (getter) hoặc ghi (setter). Ngoài ra, chúng ta có thể xác nhận giá trị trước khi thay đổi giá trị cho các thuộc tính.

Cú pháp sau đây được sử dụng để khai báo một property trong C#

//access_modifier có thể là public, protected, internal
//return_type là kiểu dữ liệu
//Property_name là tên property
access_modifier return_type Property_name
{ 
  get { return attribute; }  //Read
  set { attribute = value; } //Write
}

Ví dụ sau đây được sử dụng để tạo một property cho thuộc tính title

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication.lesson07
{
 class Book
 {
  //Khai báo thuộc tính title
  private string title;
  //Tạo property
  public string TITLE
  {
   get { return title; }
   set { title = value; }
  }
 }
}

Cú pháp sau đây trình bày cách sử dụng properties trong C#

object_name.property_name

//Ví dụ về cách sử dụng property
// Tạo đối tượng
Book b = new Book();

//Gọi phương thức get
Console.WriteLine("Title: " + b.TITLE); 
//Gọi phương thức set
b.TITLE = "Properties và Indexers trong C#";

Properties và indexers trong C# – Indexers

Trong lập trình C#, indexer cho phép chúng ta làm việc với một class như mảng. Và indexers cũng tương tự như properties ở 2 phương thức getset nhưng khác properties ở chỗ, trong indexers chấp nhận tham số.

Cú pháp tạo indexer trong C#

access_modifier return_type this [parameter]
{ 
 get { 
   //return value base on index 
 } 
 set {
  //set value base on index 
 }
}

Sau đây là một ví dụ cách tạo và sử dụng indexers trong C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication.lesson07
{
 class IndexersDemo
 {
   int[] aInt;
   public IndexersDemo(int size)
   {
    aInt = new int[size];
   }

   public int this[int index]
   {
    get
    {
     /* return value base on index*/
     return aInt[index];
    }
    set
    {
     /* set the specified index to value here */
     aInt[index] = value;
    }
   }

   static void Main(string[] args)
   {
     const int SIZE = 10;
     IndexersDemo id = new IndexersDemo(SIZE);

     Random r = new Random();
     for (int i = 0; i < SIZE; i++)
     { 
      id[i] = r.Next(1, 20);
     }

     Console.WriteLine("Elements of array ");
     for (int i = 0; i < SIZE; i++)
     {
       Console.Write(id[i] + " ");
     }

     Console.ReadLine();
   }
 }
}

Kết quả sau khi thực thi chương trình trên

properties va indexers trong c# 1

Properties và indexers trong C# – Bài tập thực hành

Bài thực hành số 1: Xây dựng lớp đăng ký thành viên của 1 diễn đàn. Thông tin cần lưu trữ gồm: Tên thành viên. (Phải từ 6-40 ký tự), tuổi (Phải từ 17 trở lên), thành phố.(phải có ít nhất 4 ký tự), nghề nghiệp (Kiểu string) và lệ phí đăng ký (Kiểu float).

Trong các thông tin trên thì tên thành viên, tuổi , thành phố là các properties. Xây dựng các phương thức cho phép người dung nhập thông tin của thành viên từ bàn phím và in ra màn hình. Xây dựng 1 menu để nhập nghề nghiệp và lệ phí đăng ký như sau

Nếu chọn 1 thì Nghề nghiệp là student và Phí đăng ký là 1000. Nếu chọn 2 thì Nghề nghiệp là Teacher và Phí đăng ký là 1400.Nếu chọn 3 thì Nghề nghiệp là Retired và Phí đăng ký là 1500. Nếu chọn 4 thì Nghề nghiệp là Other và Phí đăng ký là 2000.

Xây dựng lớp thực thi ForumnManagementSystem.

Bài thực hành số 2: Quản lý sách

Xây dựng 1 lớp Book để lưu trữ các thông tin về các cuốn sách trong nhà sách. Thông tin sách gồm có: Mã sách, tiêu đề cuốn sách và mã số ISBN.

Các thuộc tính này có các properties chỉ đọc. Xây dựng 1 constructor của lớp này có 3 tham số để gán giá trị cho các thuộc tính của sách.

Xây dựng lớp tiểu thuyết (Novel)

Khai báo 1 mảng có kiểu là Book. Xây dựng 1 constructor có 1 tham số để khởi tạo độ dài của mảng. Xây dựng 1 indexer của lớp này có kiểu là Book .

Indexer này  dung để set và get các giá trị của các cuốn sách(Book)

  • Get: nếu index mà nhỏ hơn 0 hoặc index lớn hơn độ dài của mảng Book thì return null ngược lại return phần tử mảng book.
  • Set cũng phải kiểm tra index.

Xây dựng lớp StoreManagementSystem để thực hiện lớp Novel, trong lớp này xây dựng 1 phương thức để hiển thị chi tiết các cuốn sách (Mảng book). Hình bên dưới thể hiện các chức năng của chương trình khi chạy.