Lớp trong C#

0
372

Khi bạn định nghĩa một lớp, bạn phải xác định một kế hoạch chi tiết các dữ liệu. Điều này không có nghĩa là phải xác định tất cả các dữ liệu, nhưng nó phải làm rõ được ý nghĩa của tên lớp. Nó bao gồm những đối tượng của lớp và những hoạt động có thể được thực hiện trên đối tượng đó. Các đối tượng tạo thành phiên bản của một lớp. Các phương thức và các biến mà tạo thành một lớp được gọi là thành phần của lớp.

Định nghĩa một lớp

Một lớp được bắt đầu với từ khoá class tiếp theo là tên lớp; và phần thân bao bọc bởi một cặp dấu ngoặc nhọn. Sau đây là hình thức chung của một lớp:

<Quyen truy cap> class  Ten_lop
{
   // CAC BIEN THANH VIEN
   <Quyen truy cap> <kieu du lieu> bien1;
   <Quyen truy cap> <kieu du lieu> bien2;
   ...
   <Quyen truy cap> <kieu du lieu> bienN;
   // CAC HAM THANH VIEN
   <Quyen truy cap> <kieu tra ve> phuongthuc1(danh_sach_tham_so)
   {
      // phan than
   }
   <Quyen truy cap> <kieu tra ve> phuongthuc2(danh_sach_tham_so)
   {
      // phan than
   }
   ...
   <Quyen truy cap> <kieu tra ve> phuongthucN(danh_sach_tham_so)
   {
      // phan than
   }
}

Chú thích:

  • Quyền truy cập chỉ định các giới hạn truy cập cho các thành phần của lớp cũng như chính lớp đó. Nếu không được đề cập, quyền truy cập mặc định cho một lớp là internal. Truy cập mặc định cho các thành phần là private.
  • Kiểu dữ liệu xác định kiểu dữ liệu của biến và kiểu trả về xác định kiểu dữ liệu trả về của phương thức.
  • Để truy cập các thành phần của lớp, bạn sử dụng dấu chấm (.).
  • Các dấu chấm liên kết tên của một đối tượng với tên của một thành phần.

Ví dụ sau minh họa cho các khái niệm trên:

using System;
namespace BoxApplication
{
    class Box
    {
       public double length;   // CHIEU DAI CUA HOP
       public double breadth;  // CHIEU RONG CUA HOP
       public double height;   // CHIEU CAO CUA HOP
    }
    class Boxtester
    {
        static void Main(string[] args)
        {
            Box Box1 = new Box();   // KHAI BAO HOP1
            Box Box2 = new Box();   // KHAI BAO HOP2
            double volume = 0.0;    // LUU TRU THE TICH CUA HOP O DAY
            // DAC DIEM CUA HOP1
            Box1.height = 5.0;
            Box1.length = 6.0;
            Box1.breadth = 7.0;

            // DAC DIEM CUA HOP2
            Box2.height = 10.0;
            Box2.length = 12.0;
            Box2.breadth = 13.0;
           
            // THE TICH HOP 1
            volume = Box1.height * Box1.length * Box1.breadth;
            Console.WriteLine("The tich hop 1 : {0}",  volume);

            // THE TICH HOP 2
            volume = Box2.height * Box2.length * Box2.breadth;
            Console.WriteLine("The tich hop 2 : {0}", volume);
            Console.ReadKey();
        }
    }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

The tich hop 1 : 210
The tich hop 2 : 1560

Hàm thành viên và Encapsulation

Một hàm thành viên của lớp là một hàm có định nghĩa hoặc nguyên mẫu của nó trong định nghĩa lớp tương tự như bất kỳ biến khác. Nó hoạt động trên bất kỳ đối tượng của lớp chứa nó, và có quyền truy cập vào tất cả các thành viên của một lớp cho đối tượng đó.

Biến thành viên là các thuộc tính của một đối tượng và nó được giữ kín để thực hiện đóng gói. Các biến này chỉ có thể được truy cập bằng cách sử dụng chức năng thành viên công cộng.

Chúng ta hãy dùng các khái niệm trên để thiết lập và nhận giá trị của các thành phần khác nhau trong một lớp:

using System;
namespace BoxApplication
{
   class Box
   {
     public double length; // CHIEU DAI CUA HOP
     public double breadth; // CHIEU RONG CUA HOP
     public double height; // CHIEU CAO CUA HOP
      public void setLength( double len ) //HAM KHOI TAO CO THAM SO
      {
         length = len;
      }
      
      public void setBreadth( double bre )
      {
         breadth = bre;
      }
      
      public void setHeight( double hei )
      {
         height = hei;
      }
      public double getVolume()  //HAM TINH THE TICH HOP
      {
         return length * breadth * height;
      }
   }
   class Boxtester
   {
      static void Main(string[] args)
      {
         Box Box1 = new Box();   // KHAI BAO HOP 1
         Box Box2 = new Box();
         double volume;
         
         // DAC DIEM HOP 1
         Box1.setLength(6.0);
         Box1.setBreadth(7.0);
         Box1.setHeight(5.0);
         
         // DAC DIEM HOP 2
         Box2.setLength(12.0);
         Box2.setBreadth(13.0);
         Box2.setHeight(10.0);
         
         // THE TICH HOP 1
         volume = Box1.getVolume();
         Console.WriteLine("The tich hop 1 : {0}" ,volume);
         
         // THE TICH HOP 2
         volume = Box2.getVolume();
         Console.WriteLine("The tich hop 2 : {0}", volume);
         
         Console.ReadKey();
      }
   }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

The tich hop 1 : 210
The tich hop 2 : 1560

Constructor

Một constructor lớp là một hàm thành viên đặc biệt của một lớp học, được thực hiện bất cứ khi nào chúng ta tạo ra các đối tượng mới của lớp đó.

Một constructor sẽ giống như tên của lớp và nó không có kiểu trả về. Ví dụ sau đây giải thích các khái niệm về constructor:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // CHIEU DAI CUA DAY
      public Line()
      {
         Console.WriteLine("Doi tuong dang duoc tao");
      }

      public void setLength( double len )
      {
         length = len;
      }
      
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();    
         
         // DAT CHIEU DAI CHO DAY
         line.setLength(6.0);
         Console.WriteLine("Chieu dai day : {0}", line.getLength());
         Console.ReadKey();
      }
   }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

Doi tuong dang duoc tao
Chieu dai day : 6

Một constructor mặc định không có bất kỳ tham số nhưng nếu bạn cần, một constructor có thể có tham số. nhà xây dựng như vậy được gọi là constructor tham số. Kỹ thuật này giúp bạn gán giá trị ban đầu cho một đối tượng tại thời điểm khởi tạo của nó như trong ví dụ sau:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // CHIEU DAI DAY
      public Line(double len)  //HAM KHOI TAO CO THAM SO
      {
         Console.WriteLine("Doi tuong dang duoc tao, chieu dai = {0}", len);
         length = len;
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line(10.0);
         Console.WriteLine("Chieu dai day : {0}", line.getLength()); 
         
         // set line length
         line.setLength(6.0);
         Console.WriteLine("Chieu dai day : {0}", line.getLength()); 
         Console.ReadKey();
      }
   }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

Doi tuong dang duoc tao, chieu dai = 10
Chieu dai day : 10
Chieu dai day : 6

Destructors

Một destructor là một hàm thành viên đặc biệt của một lớp, được thực hiện bất cứ khi nào khi muốn hủy một đối tượng của lớp. Destructor có tên giống như tên lớp đi với dấu tiền tố (~) và nó không trả về một giá trị nào cũng không có bất cứ tham số nào.

Destructor có thể rất hữu ích cho việc giải phóng tài nguyên bộ nhớ trước khi thoát khỏi chương trình. Destructor không thể kế thừa or nạp chồng.

Ví dụ sau đây giải thích các khái niệm về hàm hủy:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // CHIEU DAI DAY
      public Line()  // HAM KHOI TAO
      {
         Console.WriteLine("Doi tuong dang duoc tao");
      }
      ~Line() //HAM HUY
      {
         Console.WriteLine("Doi tuong dang duoc xoa");
      }

      public void setLength( double len )
      {
         length = len;
      }
      
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();
         
         // DAT CHIEU DAI CHO DAY
         line.setLength(6.0);
         Console.WriteLine("Chieu dai day : {0}", line.getLength());
         line.~Line();           
      }
   }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

Object is being created
Length of line : 6
Doi tuong dang duoc xoa

Thành phần tĩnh của một lớp

Chúng ta có thể định nghĩa các thành viên lớp tĩnh bằng cách sử dụng từ khóa static. Khi chúng ta khai báo một thành phần của một lớp là tĩnh, nó có nghĩa là không có vấn đề bao nhiêu đối tượng của lớp được tạo ra, chỉ có một bản sao duy nhất của các thành viên tĩnh.

Các từ khóa tĩnh ngụ ý rằng chỉ có một thành phần tồn tại trong một lớp. Biến tĩnh được sử dụng để xác định hằng số vì giá trị của chúng có thể được lấy bằng cách gọi bởi các lớp mà không cần tạo một lần nữa. Biến tĩnh có thể được khởi tạo bên ngoài các hàm thành viên hoặc phần định nghĩa của lớp. Bạn cũng có thể khởi tạo các biến tĩnh bên trong định nghĩa lớp.

Ví dụ sau đây cho thấy việc sử dụng các biến tĩnh:

using System;
namespace StaticVarApplication
{
   class StaticVar
   {
      public static int num; //BIEN TINH
      public void count()
      {
         num++;
      }
      public int getNum()
      {
         return num;
      }
   }
   class StaticTester
   {
      static void Main(string[] args)
      {
         StaticVar s1 = new StaticVar();
         StaticVar s2 = new StaticVar();
         s1.count();
         s1.count();
         s1.count();
         s2.count();
         s2.count();
         s2.count();
         Console.WriteLine("Bien so s1: {0}", s1.getNum());
         Console.WriteLine("Bien so s2: {0}", s2.getNum());
         Console.ReadKey();
      }
   }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

Bien so s1: 6
Bien so s2: 6

Bạn cũng có thể khai báo một hàm thành viên tĩnh. Hàm này có thể truy cập các biến chỉ tĩnh. Các chức năng tĩnh tồn tại ngay cả trước khi đối tượng được tạo ra. Ví dụ sau đây cho thấy việc sử dụng các chức năng tĩnh:

using System;
namespace StaticVarApplication
{
   class StaticVar
   {
      public static int num;
      public void count()
      {
         num++;
      }
      public static int getNum()
      {
         return num;
      }
   }
   class StaticTester
   {
      static void Main(string[] args)
      {
         StaticVar s = new StaticVar();
         s.count();
         s.count();
         s.count();
         Console.WriteLine("Bien so: {0}", StaticVar.getNum());
         Console.ReadKey();
      }
   }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

Bien so: 3

This site uses Akismet to reduce spam. Learn how your comment data is processed.