Basic OOP C#

date
Nov 2, 2023
slug
oop1-csharp
status
Published
tags
C#
Tutorial
summary
Lập trình hướng đối tượng (OOP) là một phương pháp lập trình giúp tổ chức mã nguồn dễ quản lý hơn thông qua việc chia nhỏ chương trình thành các đối tượng, lớp, thuộc tính và phương thức. Trong C#, OOP là một khía cạnh quan trọng với bốn nguyên tắc chính: Tính đóng gói (Encapsulation), Tính kế thừa (Inheritance), Tính đa hình (Polymorphism) và Tính trừu tượng (Abstraction).
type
Post
Last updated
Nov 2, 2023 02:16 PM
Lập trình hướng đối tượng (OOP) là một phương pháp lập trình giúp tổ chức mã nguồn dễ quản lý hơn thông qua việc chia nhỏ chương trình thành các đối tượng, lớp, thuộc tính và phương thức. Trong C#, OOP là một khía cạnh quan trọng với bốn nguyên tắc chính: Tính đóng gói (Encapsulation), Tính kế thừa (Inheritance), Tính đa hình (Polymorphism) và Tính trừu tượng (Abstraction).

Lớp (Class):

  • Lớp là một mô hình hoặc bản thiết kế để tạo ra các đối tượng.
  • Định nghĩa lớp bằng từ khóa "class" và tên lớp.
  • Lớp chứa các thành viên như thuộc tính (properties) và phương thức (methods).
Ví dụ:
class Person
{
    // Thuộc tính
    public string Name { get; set; }
    public int Age { get; set; }

    // Phương thức
    public void SayHello()
    {
        Console.WriteLine("Hello, my name is " + Name);
    }
}

Đối tượng (Object):

  • Đối tượng là một thể hiện cụ thể của một lớp.
  • Được tạo ra từ lớp bằng từ khóa "new".
Ví dụ:
Person person = new Person();
person.Name = "John";
person.Age = 25;
person.SayHello();

Kế thừa (Inheritance):

  • Kế thừa cho phép một lớp con (subclass) kế thừa các thuộc tính và phương thức từ một lớp cha (base class).
  • Sử dụng từ khóa "class" và từ khóa "base" để thực hiện kế thừa.
Ví dụ:
class Student : Person
{
    public string School { get; set; }

    public void Study()
    {
        Console.WriteLine("Studying at " + School);
    }
}

Student student = new Student();
student.Name = "Alice";
student.Age = 20;
student.School = "ABC University";
student.SayHello();
student.Study();

Đa hình (Polymorphism):

  • Đa hình cho phép một đối tượng có thể thể hiện nhiều hình dạng khác nhau.
  • Sử dụng kỹ thuật ghi đè (override) phương thức từ lớp cha trong lớp con.
Ví dụ:
class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("The animal makes a sound");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("The dog barks");
    }
}

class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("The cat meows");
    }
}

Animal animal1 = new Animal();
Animal animal2 = new Dog();
Animal animal3 = new Cat();

animal1.MakeSound(); // Output: The animal makes a sound
animal2.MakeSound(); // Output: The dog barks
animal3.MakeSound(); // Output: The cat meows

Đóng gói (Encapsulation):

  • Đóng gói là quá trình ẩn thông tin và bảo vệ dữ liệu của một đối tượng.
  • Sử dụng các phương thức truy cập (access modifiers) như public, private, protected để quản lý quyền truy cập vào các thành viên của lớp.
Ví dụ:
class BankAccount
{
    private decimal balance;

    public void Deposit(decimal amount)
    {
        balance += amount;
    }

    public void Withdraw(decimal amount)
    {
        if (amount <= balance)
        {
            balance -= amount;
        }
        else
        {
            Console.WriteLine("Insufficient balance");
        }
    }

    public decimal GetBalance()
    {
        return balance;
    }
}

BankAccount account = new BankAccount();
account.Deposit(1000);
account.Withdraw(500);
Console.WriteLine(account.GetBalance()); // Output: 500
 

SET và GET trong C#

  1. Bắt đầu bằng việc định nghĩa một lớp đơn giản "Person" với thuộc tính "Name":
class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}
  1. Tiếp theo, chúng ta tạo một đối tượng "person" từ lớp "Person" và gán giá trị cho thuộc tính "Name" bằng cách sử dụng phương thức set:
Person person = new Person();
person.Name = "John";
  1. Để kiểm tra giá trị của thuộc tính "Name", chúng ta sử dụng phương thức get:
Console.WriteLine(person.Name);
Output: John
  1. Bây giờ, hãy tùy chỉnh phương thức set và get để thực hiện một số xử lý trước khi gán và trả về giá trị:
class Person
{
    private string name;

    public string Name
    {
        get { return name.ToUpper(); }
        set { name = value.Trim(); }
    }
}
  1. Tiếp tục sử dụng các bước trước đó để tạo đối tượng và gán giá trị cho thuộc tính "Name":
Person person = new Person();
person.Name = "   Alice   ";
  1. Kiểm tra giá trị của thuộc tính "Name" sau khi đã được tùy chỉnh bằng phương thức get:
Console.WriteLine(person.Name);
Output: ALICE
Như vậy, chúng ta đã sử dụng set và get để truy cập và gán giá trị cho thuộc tính "Name" của đối tượng "person". Bằng cách tùy chỉnh phương thức set và get, chúng ta có thể thực hiện các xử lý trước khi gán và trả về giá trị của thuộc tính.