C# - C Sharp: Class

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Lớp (Class) đại diện cho một nhóm các đối tượng tương tự nhau về đặc điểm và hành vi.

Trong lập trình hướng đối tượng điều quan trọng là phải tạo ra được các đối tượng, nhưng không phải có bao nhiêu đối tượng ta tạo ra hết, mà ta có cách hay hơn, đó là những đối tượng có những đặc điểm và hành vi tương tự nhau (ví dụ như các đối tượng Sinh viên chẳng hạn) ta gộp chung lại thành một nhóm. Như vậy bài toán lúc này sẽ là tạo ra nhóm đối tượng đại diện cho các đối tượng tương tự nhau, từ nhóm đối tượng như vậy ta có thể tìm đến từng đối tượng cụ thể một thông qua những đặc điểm và hành vi cụ thể của đối tượng đó. Trong C#, nhóm đối tượng như vậy  gọi là lớp (class), các đặc điểm của các đối tượng gọi thuộc tính (property), còn các hành vi gọi là phương thức (method).

Cú pháp tạo lớp:

class Tên_lớp

{

Khai_báo_các_thuộc_tính;

Định_nghĩa_các_phương_thức;

}

Ví dụ:

class Student

{

string studentid;

string studentname;

 

}

Cách tạo một đối tượng từ lớp:

Tên_lớp Tên_đối_tượng = new Tên_lớp();

Truy xuất thuộc tính của đối tượng:

Tên_đối_tượng.Tên_thuộc_tính;

Sử dụng phương thức của đối tượng:

Tên_đối_tượng.Tên_phương_thức();

Phương thức tĩnh:

Để gọi đến một phương thức nào đó của lớp thì thông thường ta phải tạo một đối tượng của lớp đó và sử dụng đối tượng này để gọi phương thức. Tuy nhiên, với phương thức tĩnh thì lại khác, bạn được quyền gọi trực tiếp một phương thức tĩnh mà không phải thông qua bất kỳ một đối tượng nào.

Để tạo phương thức tĩnh đơn giản bạn chỉ cần sử dụng từ khóa static khi tạo phương thức, cụ thể như sau:

[Tầm_vực] static Kiểu_trả_về Tên_phương_thức(Đối_số_nhận_dữ_liệu)

{

Thân_phương_thức;

}

Phương thức tĩnh có thể trực tiếp truy cập tới biến tĩnh cũng như những phương thức tĩnh khác của lớp.

Phương thức tĩnh đương nhiên cũng có thể truy cập các biến và phương thức không tĩnh thông qua đối tượng.

Phương thức tĩnh không thể gọi trực tiếp tới phương thức không tĩnh trong một lớp.

Thuộc tính tĩnh:

Cũng có ý nghĩa tương tự như phương thức tĩnh.

Bổ từ truy cập:

public

private

protected

internal

protected internal

Từ khóa "ref" và "out":

- ref sẽ tiến hành truyền đối số dưới dạng một tham chiếu. Nếu có sự thay đổi giá trị từ đối số nhận thì lập tức giá trị đó cũng sẽ được truyền về đối số truyền. Lưu ý là đối số được truyền phải được khởi tạo giá trị từ đầu trước khi truyền đi.

Ví dụ:

class Program
    {
        static void Nhaplieu(ref int N)
        {
            int.TryParse(Console.ReadLine(), out N);
        }
        static void Main(string[] args)
        {
            int N=0;
            Console.Write("N = ");
            Nhaplieu(ref N);
            Console.WriteLine("Sau khi nhap, N = "+N);
            Console.ReadLine();
        }
    }

- out cũng có ý nghĩa tương tự như ref, tuy nhiên đối số được truyền không cần phải được khởi tạo giá trị, mà đối số nhận dữ liệu mới phải được khởi tạo giá trị.

Ví dụ:

  class Program
    {
        static void Nhaplieu(out int N)
        {
            int.TryParse(Console.ReadLine(), out N);
        }
        static void Main(string[] args)
        {            
            int N;
            Console.Write("N = ");
            Nhaplieu(out N);
            Console.WriteLine("Sau khi nhap, N = "+N);
            Console.ReadLine();
        }
    }

Lớp tĩnh là lớp sử dụng từ khóa static, lớp tĩnh được coi là lớp trừu tượng (abstract), và vì vậy bạn không thể tạo đối tượng từ lớp này.

Nạp chồng phương thức:

Trong một lớp bạn có thể tạo nhiều phương thức có cùng tên, nhưng khác nhau về kiểu trả về, lượng đối số, kiểu dữ liệu của từng đối số; điều này gọi là nạp chồng phương thức (overloading).

Ví dụ:

class Program
    {
        static int Tinhtong(int a, int b)
        {
            return a + b;
        }
        static float Tinhtong(int a, float b)
        {
            return a + b;
        }
        static double Tinhtong(float c, double d)
        {
            return c + d;
        }
        static void Main(string[] args)
        {
            int a = 5, b = 10;
            float c = 15;
            double d = 20;
            Console.WriteLine("Tong1 = " + Tinhtong(a, b));
            Console.WriteLine("Tong2 = " + Tinhtong(a, c));
            Console.WriteLine("Tong3 = " + Tinhtong(c, d));
            Console.ReadLine();
        }
    }

Từ khóa this:

this đại diện cho đối tượng hiện thời của phương thức.

Thường được dùng để giải quyết vấn đề trùng tên giữa các biến là đối số nhận dữ liệu và biến cục bộ của phương thức.

Ví dụ:

class Program
    {
        int width, length;
        Program(int width,int length) //hàm tạo của lớp Program
        {
            this.width = width; //this.width là trường width của lớp Program
            this.length = length; //this.length là trường length của lớp Program
        }
        static void Main(string[] args)
        {
            Console.ReadLine();
        }
    }

Constructor (hàm tạo):

Hàm tạo có mục đính là để khởi tạo các giá trị ban đầu cho các trường của đối tượng khi tạo đối tượng.

Hàm tạo sẽ tự động được thực thi mỗi khi tạo một đối tượng.

Tên của hàm tạo phải luôn giống với tên lớp chứa nó, hàm tạo có thể không có, hoặc có 1, 2, 3, ... đối số tùy thuộc vào việc khởi tạo như thế nào cho các trường của lớp.

Trong trường hợp bạn không xây dựng hàm khởi tạo cho lớp thì trình biên dịch sẽ tạo constructor mặc định cho lớp đó và đó là hàm khởi tạo không đối số, trong đó hàm sẽ gán giá trị chính là các giá trị mặc định tương ứng với kiểu dữ liệu của trường của lớp, ví dụ chuỗi rỗng cho trường kiểu string, 0 cho trường kiểu số,  false cho trường kiểu bool.

Cú pháp:

class Tên_lớp

{

Kiểu_dữ_liệu Trường1;

Kiểu_dữ_liệu Trường2;

...

Tên_lớp(Các_đối_số_nhận_giá_trị_khởi_tạo)

{

Trường1 = Giá_trị1;

Trường2 = Giá_trị2;

...

}

}

Ví dụ:

class Program
{
    int width, length;
    Program() //hàm tạo 0 đối số
    {
        width = 0;
        length = 0;
    }
    Program(int width) //hàm tạo 1 đối số
    {
        this.width = width;
    }
    Program(int width,int length) //hàm tạo 2 đối số
    {
        this.width = width;
        this.length = length;
    }
    static void Main(string[] args)
    {

        Program p = new Program(); //kích hoạt hàm tạo 0 đối số
        Program p1 = new Program(10); //kích hoạt hàm tạo 1 đối số
        Program p2 = new Program(10, 20); //kích hoạt hàm tạo 2 đối sô
        Console.ReadLine();
    }
}

Lớp tĩnh:

Sử dụng từ khoá static để tạo lớp tĩnh.

Lớp tĩnh được quyền khai báo các thành phần tĩnh nhưng không truy cập được.

Lớp tĩnh không được phép có phần thể hiện.

Thừa kế được lớp khác.

Cho phép thừa kế các thành phần public của nó, không cho phép với protected.

Không truy cập được vào các thành phần không tĩnh.

Sử dụng tên lớp trực tiếp để truy xuất các thành phần tĩnh.

» Tiếp: Hàm tạo (Constructor)
« Trước: Lớp (class) và đối tượng (object)
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!