C # cung cấp hỗ trợ đầy đủ cho lập trình hướng đối tượng bao gồm trừu tượng, đóng gói, kế thừa và đa hình.

Bạn đang xem : là hướng đối tượng c #

Lập trình hướng đối tượng (C #)

Trong bài viết này

C # là một ngôn ngữ lập trình hướng đối tượng. Bốn nguyên tắc cơ bản của lập trình hướng đối tượng là:

  • Mô hình hóa trừu tượng Mô hình hóa các thuộc tính và tương tác có liên quan của các thực thể dưới dạng các lớp để xác định một biểu diễn trừu tượng của hệ thống.
  • Tính đóng gói Ẩn trạng thái và chức năng bên trong của một đối tượng và chỉ cho phép truy cập thông qua một nhóm chức năng công khai.
  • Tính kế thừa Khả năng tạo ra các nội dung trừu tượng mới dựa trên các nội dung trừu tượng hiện có.
  • Tính đa hình Khả năng triển khai các thuộc tính hoặc phương thức kế thừa theo những cách khác nhau trên nhiều bản trừu tượng.

Trong hướng dẫn trước, giới thiệu về các lớp , bạn đã thấy cả trừu tượng và đóng gói. Lớp BankAccount cung cấp một sự trừu tượng cho khái niệm tài khoản ngân hàng. Bạn có thể sửa đổi cách triển khai của nó mà không ảnh hưởng đến bất kỳ mã nào đã sử dụng lớp BankAccount . Cả hai lớp BankAccount Transaction đều cung cấp khả năng đóng gói các thành phần cần thiết để mô tả các khái niệm đó trong mã.

Trong hướng dẫn này, bạn sẽ mở rộng ứng dụng đó để sử dụng tính kế thừa và tính đa hình để thêm các tính năng mới. Bạn cũng sẽ thêm các tính năng vào lớp BankAccount , tận dụng các kỹ thuật tóm tắt và đóng gói mà bạn đã học trong hướng dẫn trước.

Tạo các loại tài khoản khác nhau

Sau khi xây dựng chương trình này, bạn nhận được yêu cầu thêm các tính năng vào nó. Nó hoạt động tốt trong tình huống chỉ có một loại tài khoản ngân hàng. Theo thời gian, nhu cầu thay đổi và các loại tài khoản liên quan được yêu cầu:

  • Một tài khoản thu lãi tích lũy lãi suất vào cuối mỗi tháng.
  • Hạn mức tín dụng có thể có số dư âm, nhưng khi có số dư, bạn sẽ bị tính lãi hàng tháng.
  • Tài khoản thẻ quà tặng trả trước bắt đầu bằng một khoản tiền gửi duy nhất và chỉ có thể được thanh toán hết. Nó có thể được nạp lại một lần vào đầu mỗi tháng.

Tất cả các tài khoản khác nhau này đều giống với lớp BankAccount được định nghĩa trong hướng dẫn trước đó. Bạn có thể sao chép mã đó, đổi tên các lớp và thực hiện sửa đổi. Kỹ thuật đó sẽ hiệu quả trong ngắn hạn, nhưng nó sẽ hiệu quả hơn theo thời gian. Mọi thay đổi sẽ được sao chép trên tất cả các lớp bị ảnh hưởng.

Thay vào đó, bạn có thể tạo các loại tài khoản ngân hàng mới kế thừa các phương thức và dữ liệu từ lớp BankAccount được tạo trong hướng dẫn trước. Các lớp mới này có thể mở rộng lớp BankAccount với hành vi cụ thể cần thiết cho từng loại:

  public class InterestEarningAccount: BankAccount
{
}

public class LineOfCreditAccount: BankAccount
{
}

hạng công khai GiftCardAccount: BankAccount
{
}
 

Mỗi lớp này kế thừa hành vi được chia sẻ từ lớp cơ sở được chia sẻ của chúng, lớp BankAccount . Viết các triển khai cho chức năng mới và khác nhau trong mỗi lớp dẫn xuất. Các lớp dẫn xuất này đã có tất cả các hành vi được xác định trong lớp BankAccount .

Bạn nên tạo mỗi lớp mới trong một tệp nguồn khác nhau. Trong Visual Studio , bạn có thể nhấp chuột phải vào dự án và chọn thêm lớp để thêm lớp mới trong tệp mới. Trong Visual Studio Code , chọn Tệp rồi chọn Mới để tạo tệp nguồn mới. Trong một trong hai công cụ, hãy đặt tên tệp phù hợp với lớp: InterestEarningAccount.cs, LineOfCreditAccount.cs và GiftCardAccount.cs.

Khi bạn tạo các lớp như được hiển thị trong mẫu trước, bạn sẽ thấy rằng không có lớp nào trong số các lớp dẫn xuất của bạn biên dịch. Một phương thức khởi tạo chịu trách nhiệm khởi tạo một đối tượng. Một phương thức khởi tạo lớp dẫn xuất phải khởi tạo lớp dẫn xuất và cung cấp hướng dẫn về cách khởi tạo đối tượng lớp cơ sở được bao gồm trong lớp dẫn xuất. Quá trình khởi tạo thích hợp thường diễn ra mà không cần bất kỳ mã bổ sung nào. Lớp BankAccount khai báo một hàm tạo công khai với chữ ký sau:

 public BankAccount (tên chuỗi, số thập phân ban đầuBalance)
 

Trình biên dịch không tạo một phương thức khởi tạo mặc định khi bạn tự định nghĩa một phương thức khởi tạo. Điều đó có nghĩa là mỗi lớp dẫn xuất phải gọi hàm tạo này một cách rõ ràng. Bạn khai báo một phương thức khởi tạo có thể truyền các đối số cho phương thức khởi tạo lớp cơ sở. Đoạn mã sau hiển thị hàm tạo cho InterestEarningAccount :

 public InterestEarningAccount (string name, decimal initialBalance): base (name, initialBalance)
{
}
 

Các tham số của hàm tạo mới này khớp với kiểu tham số và tên của hàm tạo lớp cơ sở. Bạn sử dụng cú pháp : base () để chỉ ra lệnh gọi đến hàm tạo lớp cơ sở. Một số lớp xác định nhiều hàm tạo và cú pháp này cho phép bạn chọn hàm tạo lớp cơ sở mà bạn gọi. Khi bạn đã cập nhật các hàm tạo, bạn có thể phát triển mã cho từng lớp dẫn xuất. Các yêu cầu đối với các lớp mới có thể được nêu như sau:

  • Tài khoản thu lãi:
    • Sẽ nhận được một khoản tín dụng là 2% của số dư cuối tháng.
  • Hạn mức tín dụng:
    • Có thể có số dư âm, nhưng không được lớn hơn giá trị tuyệt đối so với hạn mức tín dụng.
    • Sẽ phải chịu phí lãi suất mỗi tháng nếu số dư cuối tháng không bằng 0.
    • Sẽ phải trả phí cho mỗi lần rút tiền vượt quá hạn mức tín dụng.
  • Tài khoản thẻ quà tặng:
    • Có thể được nạp lại với một số tiền cụ thể mỗi tháng một lần vào ngày cuối cùng của tháng.
Xem Thêm  CSS: số liệu & chú thích - làm thế nào để sử dụng chú thích hình

Bạn có thể thấy rằng cả ba loại tài khoản này đều có một hành động diễn ra vào cuối mỗi tháng. Tuy nhiên, mỗi loại tài khoản thực hiện các nhiệm vụ khác nhau. Bạn sử dụng tính đa hình để triển khai mã này. Tạo một phương thức virtual trong lớp BankAccount :

 public virtual void PerformMonthEndTransactions () {}
 

Đoạn mã trước hiển thị cách bạn sử dụng từ khóa virtual để khai báo một phương thức trong lớp cơ sở mà một lớp dẫn xuất có thể cung cấp một triển khai khác. Phương thức virtual là một phương thức mà bất kỳ lớp dẫn xuất nào cũng có thể chọn để thực hiện lại. Các lớp dẫn xuất sử dụng từ khóa override để xác định triển khai mới. Thông thường, bạn gọi điều này là “ghi đè việc triển khai lớp cơ sở”. Từ khóa virtual chỉ định rằng các lớp dẫn xuất có thể ghi đè hành vi. Bạn cũng có thể khai báo các phương thức abstract trong đó các lớp dẫn xuất phải ghi đè hành vi. Lớp cơ sở không cung cấp triển khai cho phương thức abstract . Tiếp theo, bạn cần xác định việc triển khai cho hai trong số các lớp mới mà bạn đã tạo. Bắt đầu với InterestEarningAccount :

 ghi đè công khai void PerformMonthEndTransactions ()
{
    if (Cân bằng & gt; 500m)
    {
        lãi thập phân = Số dư * 0,05m;
        MakeDeposit (lãi suất, DateTime.Now, "áp dụng lãi suất hàng tháng");
    }
}
 

Thêm mã sau vào LineOfCreditAccount . Mã phủ định số dư để tính phí lãi dương được rút từ tài khoản:

 ghi đè công khai void PerformMonthEndTransactions ()
{
    if (Số dư & lt; 0)
    {
        // Giảm số dư để nhận lãi suất dương:
        lãi thập phân = -Balance * 0,07m;
        MakeWithdrawal (lãi suất, DateTime.Now, "Tính lãi hàng tháng");
    }
}
 

Lớp GiftCardAccount cần hai thay đổi để triển khai chức năng cuối tháng. Trước tiên, hãy sửa đổi hàm tạo để bao gồm một số tiền tùy chọn để thêm vào mỗi tháng:

 private readonly decimal _monthlyDeposit = 0m;

public GiftCardAccount (tên chuỗi, số thập phân ban đầuBalance, số thập phân hàng thángDeposit = 0): base (tên, số tiền ban đầu)
    = & gt; _monthlyDeposit = monthDeposit;
 

Hàm tạo cung cấp giá trị mặc định cho giá trị monthDeposit để người gọi có thể bỏ qua 0 mà không cần đặt cọc hàng tháng. Tiếp theo, ghi đè phương thức PerformMonthEndTransactions để thêm khoản tiền gửi hàng tháng, nếu nó được đặt thành giá trị khác 0 trong hàm tạo:

 ghi đè công khai void PerformMonthEndTransactions ()
{
    if (_monthlyDeposit! = 0)
    {
        MakeDeposit (_monthlyDeposit, DateTime.Now, "Thêm tiền gửi hàng tháng");
    }
}
 

Việc ghi đè áp dụng khoản tiền gửi hàng tháng được đặt trong phương thức khởi tạo. Thêm mã sau vào phương thức Main để kiểm tra những thay đổi này cho GiftCardAccount InterestEarningAccount :

 var giftCard = new GiftCardAccount ("thẻ quà tặng", 100, 50);
giftCard.MakeWithdrawal (20, DateTime.Now, "cà phê đắt tiền");
giftCard.MakeWithdrawal (50, DateTime.Now, "mua hàng tạp hóa");
giftCard.PerformMonthEndTransactions ();
// có thể nạp thêm tiền:
giftCard.MakeDeposit (27,50 triệu, DateTime.Now, "thêm một số tiền chi tiêu bổ sung");
Console.WriteLine (giftCard.GetAccountHistory ());

var Saving = new InterestEarningAccount ("tài khoản tiết kiệm", 10000);
Saving.MakeDeposit (750, DateTime.Now, "tiết kiệm một số tiền");
Saving.MakeDeposit (1250, DateTime.Now, "Thêm nhiều khoản tiết kiệm hơn");
Tiết kiệm.MakeWithdrawal (250, DateTime.Now, "Cần thiết để thanh toán hóa đơn hàng tháng");
tiết kiệm.PerformMonthEndTransactions ();
Console.WriteLine (Saving.GetAccountHistory ());
 

Xác minh kết quả. Bây giờ, hãy thêm một bộ mã kiểm tra tương tự cho LineOfCreditAccount :

  var lineOfCredit = new LineOfCreditAccount ("hạn mức tín dụng", 0);
    // Vay bao nhiêu là quá nhiều?
    lineOfCredit.MakeWithdrawal (1000m, DateTime.Now, "Rút tiền tạm ứng hàng tháng");
    lineOfCredit.MakeDeposit (50 triệu, DateTime.Now, "Hoàn trả số tiền nhỏ");
    lineOfCredit.MakeWithdrawal (5000m, DateTime.Now, "Quỹ khẩn cấp để sửa chữa");
    lineOfCredit.MakeDeposit (150m, DateTime.Now, "Khôi phục một phần khi sửa chữa");
    lineOfCredit.PerformMonthEndTransactions ();
    Console.WriteLine (lineOfCredit.GetAccountHistory ());
 

Khi bạn thêm mã trước đó và chạy chương trình, bạn sẽ thấy lỗi giống như sau:

  Ngoại lệ chưa được xử lý. System.ArgumentOutOfRangeException: Số tiền gửi phải là số dương (Tham số 'số tiền')
   tại OOProgramming.BankAccount.MakeDeposit (Số thập phân, ngày DateTime, ghi chú chuỗi) trong BankAccount.cs: dòng 42
   tại OOProgramming.BankAccount..ctor (String name, Decimal initialBalance) trong BankAccount.cs: dòng 31
   tại OOProgramming.LineOfCreditAccount..ctor (Tên chuỗi, Dấu đầu thập phân) trong LineOfCreditAccount.cs: dòng 9
   tại OOProgramming.Program.Main (String [] args) trong Program.cs: dòng 29
 

Lưu ý

Xem Thêm  Câu lệnh Python If Else (10 Ví dụ) - if else câu lệnh python

Đầu ra thực tế bao gồm đường dẫn đầy đủ đến thư mục có dự án. Tên thư mục đã được bỏ qua cho ngắn gọn. Ngoài ra, tùy thuộc vào định dạng mã của bạn, số dòng có thể hơi khác một chút.

Mã này không thành công vì BankAccount giả định rằng số dư ban đầu phải lớn hơn 0. Một giả định khác được đưa vào lớp BankAccount là số dư không thể âm . Thay vào đó, bất kỳ giao dịch rút tiền nào thấu chi tài khoản đều bị từ chối. Cả hai giả định đó cần phải thay đổi. Hạn mức của tài khoản tín dụng bắt đầu từ 0 và thường sẽ có số dư âm. Ngoài ra, nếu khách hàng vay quá nhiều tiền, họ sẽ phải chịu một khoản phí. Giao dịch được chấp nhận, nó chỉ tốn thêm chi phí. Quy tắc đầu tiên có thể được triển khai bằng cách thêm đối số tùy chọn vào hàm tạo BankAccount để chỉ định số dư tối thiểu. Giá trị mặc định là 0 . Quy tắc thứ hai yêu cầu một cơ chế cho phép các lớp dẫn xuất sửa đổi thuật toán mặc định. Theo một nghĩa nào đó, lớp cơ sở “hỏi” kiểu dẫn xuất điều gì sẽ xảy ra khi có thấu chi. Hành vi mặc định là từ chối giao dịch bằng cách đưa ra một ngoại lệ.

Hãy bắt đầu bằng cách thêm một hàm tạo thứ hai bao gồm tham số MinimumBalance tùy chọn. Hàm tạo mới này thực hiện tất cả các hành động được thực hiện bởi hàm tạo hiện có. Ngoài ra, nó đặt thuộc tính số dư tối thiểu. Bạn có thể sao chép phần thân của hàm tạo hiện có. nhưng điều đó có nghĩa là hai địa điểm sẽ thay đổi trong tương lai. Thay vào đó, bạn có thể sử dụng chuỗi hàm tạo để có một hàm tạo gọi một hàm tạo khác. Đoạn mã sau hiển thị hai hàm tạo và trường bổ sung mới:

 private chỉ đọc số thập phân _minimumBalance;

public BankAccount (string name, decimal initialBalance): this (name, initialBalance, 0) {}

Ngân hàng công khai
{
    Number = s_accountNumberSeed.ToString ();
    s_accountNumberSeed ++;

    Chủ sở hữu = tên;
    _minimumBalance = tối thiểuBalance;
    if (InitialBalance & gt; 0)
        MakeDeposit (InitialBalance, DateTime.Now, "Số dư ban đầu");
}
 

Đoạn mã trước hiển thị hai kỹ thuật mới. Đầu tiên, trường MinimumBalance được đánh dấu là chỉ đọc . Điều đó có nghĩa là giá trị không thể thay đổi sau khi đối tượng được xây dựng. Khi BankAccount được tạo, MinimumBalance không thể thay đổi. Thứ hai, hàm tạo nhận hai tham số sử dụng : this (name, initialBalance, 0) {} làm triển khai của nó. Biểu thức : this () gọi hàm tạo khác, hàm có ba tham số. Kỹ thuật này cho phép bạn có một triển khai duy nhất để khởi tạo một đối tượng mặc dù mã máy khách có thể chọn một trong nhiều hàm tạo.

Việc triển khai này gọi MakeDeposit chỉ khi số dư ban đầu lớn hơn 0 . Điều đó duy trì quy tắc rằng tiền gửi phải là số dương, nhưng hãy để tài khoản tín dụng mở với số dư 0 .

Giờ đây, lớp BankAccount có trường chỉ đọc cho số dư tối thiểu, thay đổi cuối cùng là thay đổi mã cứng 0 thành MinimumBalance trong phương thức MakeWithdrawal :

  if (Số dư - số tiền & lt; tối thiểuBalance)
 

Sau khi mở rộng lớp BankAccount , bạn có thể sửa đổi hàm tạo LineOfCreditAccount để gọi hàm tạo cơ sở mới, như được hiển thị trong đoạn mã sau:

 public LineOfCreditAccount (string name, decimal initialBalance, decimal creditLimit): base (name, initialBalance, -creditLimit)
{
}
 

Lưu ý rằng hàm tạo LineOfCreditAccount thay đổi dấu hiệu của tham số creditLimit để nó khớp với ý nghĩa của tham số MinimumBalance .

Các quy tắc thấu chi khác nhau

Tính năng cuối cùng được thêm vào cho phép LineOfCreditAccount tính phí vượt quá hạn mức tín dụng thay vì từ chối giao dịch.

Một kỹ thuật là xác định một hàm ảo nơi bạn triển khai hành vi cần thiết. Lớp BankAccount sẽ cấu trúc lại phương thức MakeWithdrawal thành hai phương thức. Phương thức mới thực hiện hành động được chỉ định khi việc rút tiền có số dư dưới mức tối thiểu. Phương thức MakeWithdrawal hiện có có mã sau:

  public void MakeWithdrawal (số thập phân, ngày DateTime, chuỗi ghi chú)
{
    nếu (số tiền & lt; = 0)
    {
        ném ArgumentOutOfRangeException mới (nameof (số tiền), "Số tiền rút phải là số dương");
    }
    if (Số dư - số tiền & lt; tối thiểuBalance)
    {
        ném ra InvalidOperationException mới ("Không đủ tiền cho lần rút tiền này");
    }
    var rút lui = Giao dịch mới (-tài khoản, ngày tháng, ghi chú);
    allTransactions.Add (rút tiền);
}
 

Thay thế nó bằng mã sau:

 public void MakeWithdrawal (số thập phân, ngày DateTime, chuỗi ghi chú)
{
    nếu (số tiền & lt; = 0)
    {
        ném ArgumentOutOfRangeException mới (nameof (số tiền), "Số tiền rút phải là số dương");
    }
    Giao dịch? overdraftTransaction = CheckWithdrawalLimit (Số dư - số tiền & lt; _minimumBalance);
    Giao dịch? rút tiền = mới (-tài khoản, ngày tháng, ghi chú);
    _allTransactions.Add (rút tiền);
    if (overdraftTransaction! = null)
        _allTransactions.Add (overdraftTransaction);
}

Giao dịch ảo được bảo vệ? CheckWithdrawalLimit (bool isOverdrawn)
{
    if (isOverdrawn)
    {
        ném ra InvalidOperationException mới ("Không đủ tiền cho lần rút tiền này");
    }
    khác
    {
        trả về mặc định;
    }
}
 

Phương thức được thêm vào là protected , có nghĩa là nó chỉ có thể được gọi từ các lớp dẫn xuất. Khai báo đó ngăn không cho các máy khách khác gọi phương thức. Nó cũng là virtual để các lớp dẫn xuất có thể thay đổi hành vi. Loại trả lại là Giao dịch? . Chú thích ? cho biết rằng phương thức có thể trả về null . Thêm cách triển khai sau vào LineOfCreditAccount để tính phí khi vượt quá giới hạn rút tiền:

 được bảo vệ ghi đè Giao dịch? CheckWithdrawalLimit (bool isOverdrawn) = & gt;
    isOverdrawn
    ? Giao dịch mới (-20, DateTime.Now, "Áp dụng phí thấu chi")
    : mặc định;
 

Việc ghi đè trả lại một giao dịch phí khi tài khoản được thấu chi. Nếu việc rút tiền không vượt quá giới hạn, phương thức này sẽ trả về giao dịch null . Điều đó cho thấy không có phí. Kiểm tra những thay đổi này bằng cách thêm mã sau vào phương thức Main của bạn trong lớp Program :

 var lineOfCredit = new LineOfCreditAccount ("hạn mức tín dụng", 0, 2000);
// Vay bao nhiêu là quá nhiều?
lineOfCredit.MakeWithdrawal (1000m, DateTime.Now, "Rút tiền tạm ứng hàng tháng");
lineOfCredit.MakeDeposit (50 triệu, DateTime.Now, "Hoàn trả số tiền nhỏ");
lineOfCredit.MakeWithdrawal (5000m, DateTime.Now, "Quỹ khẩn cấp để sửa chữa");
lineOfCredit.MakeDeposit (150m, DateTime.Now, "Khôi phục một phần khi sửa chữa");
lineOfCredit.PerformMonthEndTransactions ();
Console.WriteLine (lineOfCredit.GetAccountHistory ());
 

Chạy chương trình và kiểm tra kết quả.

Tóm tắt

Nếu gặp khó khăn, bạn có thể xem nguồn của hướng dẫn này trong repo GitHub của chúng tôi .

Hướng dẫn này trình bày nhiều kỹ thuật được sử dụng trong lập trình Hướng đối tượng:

  • Bạn đã sử dụng Tóm tắt khi xác định các lớp cho từng loại tài khoản khác nhau. Các lớp đó đã mô tả hoạt động của loại tài khoản đó.
  • Bạn đã sử dụng tính năng Đóng gói khi giữ nhiều chi tiết riêng tư trong mỗi lớp.
  • Bạn đã sử dụng Kế thừa khi tận dụng triển khai đã được tạo trong lớp BankAccount để lưu mã.
  • Bạn đã sử dụng Đa hình khi tạo các phương thức virtual mà các lớp dẫn xuất có thể ghi đè để tạo ra hành vi cụ thể cho loại tài khoản đó.


Xem thêm những thông tin liên quan đến chủ đề là hướng đối tượng c #

[Hướng đối tượng C++] Đa hình là gì ?(Phần 2) - Phương thức thuần ảo

  • Tác giả: Thien Tam Nguyen
  • Ngày đăng: 2016-11-14
  • Đánh giá: 4 ⭐ ( 2124 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: - Source code: http://123link.pw/7Nrv

Tổng quan kiến thức về lập trình hướng đối tượng trong C

  • Tác giả: box.edu.vn
  • Đánh giá: 4 ⭐ ( 4175 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lập trình hướng đối tượng trong C hiện nay cũng rất được ưa chuộng và sử dụng phổ biến. Cụ thể cách sử dụng thế nào thì hãy đọc bài viết này ngay nhé!

Lập trình hướng đối tượng (OOP) trong C#

  • Tác giả: comdy.vn
  • Đánh giá: 3 ⭐ ( 3575 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lập trình hướng đối tượng (OOP) trong C# là gì? 5 khái niệm và 4 tính chất quan trọng của lập trình hướng đối tượng là gì?

Viết C theo tinh thần hướng đối tượng

  • Tác giả: kipalog.com
  • Đánh giá: 4 ⭐ ( 2119 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Nhân vật ấn tượng nhất trong tuyệt tác Tiếu Ngạo Giang Hồ có lẽ ai cũng đồng ý là Lệnh Hồ công tử. Kim Dung tiên sinh đã kể rất nhiều tình tiết tro...

OOP là gì? Các tính chất của lập trình hướng đối tượng trong C

  • Tác giả: tuicocach.com
  • Đánh giá: 3 ⭐ ( 2852 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: OOP (viết tắt của Object Oriented Programming) – lập trình hướng đối tượng là một phương pháp lập trình dựa trên khái ...

Bài Tập Lập Trình Hướng Đối Tượng C Cơ Bản

  • Tác giả: firstreal.com.vn
  • Đánh giá: 3 ⭐ ( 9498 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Thiết lập lớp PhanSo để biểu diễn khái niệm phân số với hai thành phần dữ liệu tử số, mẫu số và các hàm thành phần cộng, trừ, nhân, chia hai phân số, các hàm

Xem tài liệu Chương 9: Lập trình hướng đối tượng trong C#

  • Tác giả: nonghoc.com
  • Đánh giá: 5 ⭐ ( 3352 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chương 9: Lập trình hướng đối tượng trong C#

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php