Hướng dẫn chuyên sâu này giải thích tất cả về C# bằng cách sử dụng câu lệnh và phương thức ảo. Bạn cũng sẽ tìm hiểu sự khác biệt giữa phương thức trừu tượng và ảo:
Khối Sử dụng chủ yếu giúp quản lý tài nguyên, nó cho phép hệ thống quản lý tài nguyên của mình bằng cách chỉ định phạm vi của đối tượng và yêu cầu tài nguyên của nó.
.Net Framework cung cấp các cách khác nhau để quản lý tài nguyên cho các đối tượng sử dụng trình thu gom rác. Điều đó có nghĩa là bạn không cần phân bổ và loại bỏ các đối tượng bộ nhớ một cách rõ ràng. Thao tác dọn dẹp đối với mọi đối tượng không được quản lý sẽ được xử lý bằng cách sử dụng hàm hủy.
Để giúp các lập trình viên đạt được điều này, câu lệnh sử dụng C# cung cấp một điều kiện để hủy đối tượng.
Để đạt được khả năng tự động hủy đối tượng, C# cung cấp một phương thức xử lý có thể được gọi khi đối tượng không còn cần thiết nữa. Câu lệnh sử dụng trong C# xác định ranh giới có điều kiện cho sự tồn tại của đối tượng. Sau khi trình tự thực thi rời khỏi ranh giới sử dụng, khung .Net sẽ biết rằng đã đến lúc hủy đối tượng đó.
Câu lệnh Sử dụng C#
Triển khai Giao diện IDis Dùng để Sử dụng
Các C# Sử dụng câu lệnh cho phép các lập trình viên triển khai một số tài nguyên trong một câu lệnh. Tất cả các đối tượng được xác định bên trong khối mã sử dụng phải triển khai giao diện IDisposable và điều này cho phép khung gọi phương thức xử lýcác phương thức cho các đối tượng được chỉ định bên trong câu lệnh sau khi nó được thoát.
Ví dụ
Việc sử dụng câu lệnh có thể được kết hợp với một loại có thể triển khai IDisposable như StreamWriter, StreamReader, v.v. .
Hãy xem xét một chương trình đơn giản:
public class Program { public static void Main(string[] args) { using (SysObj so = new SysObj()) { Console.WriteLine("Inside using statement"); } Console.WriteLine("Outside of the using statement block"); } } class SysObj : IDisposable { public void Dispose() { Console.WriteLine("Dispose method"); } }
Đầu ra
Đầu ra của phần trên chương trình:
Bên trong câu lệnh sử dụng
Phương thức loại bỏ
Bên ngoài khối câu lệnh sử dụng
Giải thích
Trong ví dụ trên, khi chương trình được thực thi, phiên bản “SysObj” đầu tiên được cấp phát trong bộ nhớ heap. Sau đó, khối sử dụng bắt đầu thực thi và in đầu ra mà chúng ta đã xác định bên trong bàn điều khiển. Tiếp theo, khi khối câu lệnh Sử dụng kết thúc, việc thực thi ngay lập tức được chuyển sang phương thức xử lý.
Sau đó, mã sẽ thoát khỏi khối câu lệnh và in câu lệnh bên ngoài ra bàn điều khiển.
C# Virtual Phương thức
Phương thức ảo là gì?
Phương thức ảo là một phương thức lớp cung cấp chức năng cho lập trình viên để ghi đè lên một phương thức trong lớp dẫn xuất có cùng chữ ký. Các phương thức ảo chủ yếu được sử dụng để thực hiện tính đa hình trong môi trường OOP.
Một phương thức ảo có thể triển khai ở cả lớp dẫn xuất và lớp cơ sở. Nó chủ yếu được sử dụng khi người dùng cần có nhiều chức năng hơn trong lớp dẫn xuất.
Một phương thức ảo trước tiên được tạo trong lớp cơ sở và sau đó nó đượcghi đè trong lớp dẫn xuất. Một phương thức ảo có thể được tạo trong lớp cơ sở bằng cách sử dụng từ khóa “ảo” và phương thức tương tự có thể được ghi đè trong lớp dẫn xuất bằng cách sử dụng từ khóa “ghi đè”.
Phương thức ảo: Một số điểm cần nhớ
- Phương thức ảo trong lớp dẫn xuất có từ khóa ảo và phương thức trong lớp dẫn xuất phải có từ khóa ghi đè.
- Nếu một phương thức được khai báo là phương thức ảo trong lớp cơ sở , thì không phải lúc nào lớp dẫn xuất cũng yêu cầu phải ghi đè phương thức đó, tức là việc ghi đè một phương thức ảo trong lớp dẫn xuất là tùy chọn.
- Nếu một phương thức có cùng định nghĩa trong cả lớp cơ sở và lớp dẫn xuất thì không phải cần thiết để ghi đè phương thức. Chỉ cần ghi đè nếu cả hai có định nghĩa khác nhau.
- Phương thức ghi đè cho phép chúng ta sử dụng nhiều biểu mẫu cho cùng một phương thức, do đó nó cũng thể hiện tính đa hình.
- Tất cả các phương thức đều không -virtual theo mặc định.
- Không thể sử dụng công cụ sửa đổi ảo cùng với công cụ sửa đổi Riêng tư, Tĩnh hoặc Trừu tượng.
Công dụng của từ khóa ảo trong C# là gì?
Từ khóa ảo trong C# được sử dụng để ghi đè thành viên lớp cơ sở trong lớp dẫn xuất của nó dựa trên yêu cầu.
Từ khóa ảo được sử dụng để chỉ định phương thức ảo trong lớp cơ sở và phương thức có cùng chữ ký cần được ghi đè trong lớp dẫn xuấtđứng trước từ khóa ghi đè.
Sự khác biệt giữa Phương thức trừu tượng và Phương thức ảo
Các phương thức ảo chứa triển khai và cho phép lớp dẫn xuất ghi đè lên nó trong khi phương thức trừu tượng không cung cấp bất kỳ triển khai nào và nó buộc các lập trình viên viết các phương thức ghi đè trong lớp dẫn xuất.
Do đó, nói một cách đơn giản, các phương thức trừu tượng không có bất kỳ mã nào bên trong chúng trong khi phương thức ảo có triển khai riêng.
Sự khác biệt giữa Virtual And Override Trong C#
Từ khóa virtual thường được theo sau bởi chữ ký của phương thức, thuộc tính, v.v. và cho phép nó được ghi đè trong lớp dẫn xuất. Từ khóa ghi đè được sử dụng trong lớp dẫn xuất có cùng chữ ký phương thức/thuộc tính như trong lớp cơ sở để đạt được quyền ghi đè trong lớp dẫn xuất.
Có bắt buộc phải ghi đè phương thức ảo trong C# không?
Trình biên dịch sẽ không bao giờ ép buộc các lập trình viên ghi đè một phương thức ảo. Lớp dẫn xuất không phải lúc nào cũng yêu cầu ghi đè phương thức ảo.
Ví dụ
Hãy cùng xem một ví dụ để hiểu rõ hơn về các phương thức ảo.
Trong ví dụ này, chúng ta sẽ sử dụng hai phương thức khác nhau trong lớp cơ sở, phương thức đầu tiên là phương thức không ảo và phương thức còn lại là phương thức ảo với từ khóa ảo. Cả hai phương thức này sẽ bị ghi đè trong lớp dẫn xuất.
Chúng ta hãy có mộtnhìn:
Chương trình
using System; public class Program { public static void Main(string[] args) { calculate calc = new calculate (); numbers nmbr = calc; calc.addition(); nmbr.addition(); calc.subtraction(); nmbr.subtraction(); } } public class numbers { public void addition(){ Console.WriteLine("This is addition method"); } public virtual void subtraction(){ Console.WriteLine("This is subtraction method"); } } public class calculate : numbers { public void addition(){ Console.WriteLine("This is addition method in the derived class"); } public override void subtraction(){ Console.WriteLine("This is subtraction method override in derived class"); } }
Đầu ra
Đầu ra của chương trình trên là:
Đây là phương thức cộng trong lớp dẫn xuất
Đây là phương thức cộng
Đây là phương thức trừ ghi đè trong lớp dẫn xuất
Đây là phương thức phép trừ ghi đè trong lớp được dẫn xuất
Giải thích
Trong ví dụ trên, chúng ta có hai lớp tức là Số và Tính toán. Lớp cơ sở Number có hai phương thức, tức là cộng và trừ trong đó phép cộng là phương thức không ảo và phép trừ là phương thức ảo. Do đó, khi chúng ta thực thi chương trình này, phương thức ảo “thêm” của lớp cơ sở bị ghi đè trong lớp dẫn xuất Tính toán.
Trong một lớp “Chương trình” khác, chúng ta tạo một điểm vào để tạo một thể hiện của lớp dẫn xuất Tính toán và sau đó chúng ta gán cùng một thể hiện cho đối tượng thể hiện của lớp cơ sở.
Khi chúng ta gọi các phương thức ảo và không ảo bằng cách sử dụng các thể hiện của lớp thì chúng ta thấy rằng phương thức ảo đã bị ghi đè bằng cách sử dụng cả hai thể hiện trong khi phương thức không ảo chỉ bị ghi đè khi gọi lớp dẫn xuất.
Kết luận
Câu lệnh sử dụng trong C# chủ yếu được sử dụng để quản lý tài nguyên. Câu lệnh sử dụng xác định một ranh giới có điều kiện cho sự tồn tại của một đối tượng.
Sau khi quá trình thực thi di chuyển ra khỏi khối câu lệnh, nó sẽ yêu cầu khung hủy mọi đối tượng được tạo bên trongkhối câu lệnh. Mã được xác định bên trong câu lệnh cũng phải triển khai giao diện IDisposable để cho phép khung .Net gọi phương thức xử lý cho các đối tượng đã xác định.
Một phương thức ảo cho phép người dùng ghi đè một phương thức trong lớp dẫn xuất có chữ ký giống như phương thức trong lớp cơ sở. Phương thức ảo có thể được sử dụng để đạt được tính đa hình trong các ngôn ngữ lập trình hướng đối tượng.
Phương thức ảo chủ yếu được sử dụng khi cần thêm chức năng trong lớp dẫn xuất. Các phương thức ảo không thể là tĩnh hoặc trừu tượng riêng tư. Nó được xác định bằng cách sử dụng từ khóa ảo trong lớp cơ sở và từ khóa ghi đè trong lớp dẫn xuất.