Kế thừa và từ khóa virtual trong c#
16:00 ngày 10-11-2017
Từ khóa virtual
được sử dụng để chỉnh sửa một phương thước, thuộc tính,.. Nó cho phép lớp con override lại từ lớp cha. Khi một phương thức virtual
được thực thi, kiểu của đối tượng tại thời điểm thực thi (run-time type) được kiểm tra và phương thức được override từ lớp con sẽ được gọi.
Mặc định các phương thức là non-virtual
. Từ khóa virtual không thể được sử dụng với các từ khóa static
, abstract
, private
và override
Ví dụ bên dưới sẽ mô tả cách thức hoạt động của từ khóa virtual
using System;
namespace KeThua
{
class Program
{
class Horse
{
public string SayHello()
{
return "Hello, I'm an horse";
}
}
class Donkey : Horse
{
public string SayHello()
{
return "Hello, I'm a donkey";
}
}
static void PrintHello(Horse obj)
{
Console.WriteLine(obj.SayHello());
}
static void Main(string[] args)
{
var horse = new Horse();
var donkey = new Donkey();
PrintHello(horse);
PrintHello(donkey);
Console.ReadKey();
}
}
}
Kết quả thực thi chương trình
Hello, I'm an horse
Hello, I'm an horse
Chúng ta mong đợi PrintHello(donkey);
sẽ in ra Hello, I'm a donkey
. Nhưng thực tế lại khác. Khi gọi hàm PrintHello()
, donkey
được ép qua kiểu Horse
. Chính vì vậy, khi chương trình thực thi, nó sẽ gọi hàm SayHello()
của class Horse
.
Để chương trình biết phải gọi hàm SayHello()
của class Donkey
tại thời điểm thực thi. Thì từ khóa virtual
và override
cần được sử dụng. Class Horse
và Donkey
cần được sửa như bên dưới.
class Horse
{
public virtual string SayHello()
{
return "Hello, I'm an horse";
}
}
class Donkey : Horse
{
public override string SayHello()
{
return "Hello, I'm a donkey";
}
}
Bây giờ kết quả đã như mong đợi
Hello, I'm an horse
Hello, I'm a donkey
Sự khác nhau giữa Abstract và Virtual
Cả hai từ khóa này điều giúp phương thức của lớp con được triệu gọi ở run-time
. Nhưng khác với Virtual
, từ khóa Abstract
sẽ làm cả đối tượng trở thành Abstract
và không thể hiện thực đối tượng (Không thể khởi tạo đối tượng từ lớp Abstract
). Đồng thơi phương thức với từ khóa Abstract
bắt buộc không được Implement ở lớp cha. Và lớp con phải implement nó. Chúng ta có thể sơ lược như sau
- Phương thức Abstract phải nằm trong lớp Abstract
- Phương thức Abstract không được có phần thân hàm
- Lớp con phải viết lại tất cả các phương thước Abstract khi kế thừa lớp Abstract
- Lớp Abstract thì không thể khởi tạo
Bên dưới là cách sử dụng abstract
abstract class Horse
{
abstract public string SayHello();
}
class Donkey : Horse
{
public override string SayHello()
{
return "Hello, I'm a donkey";
}
}
Viết Phản Hồi
Chuyên Mục
- Android (0)
- C#, ASP.Net (4)
- C, C++ (0)
- HTML, CSS, JavaScript (5)
- Database (1)
- Linh Tinh (2)
Bài Viết Mới
- Kế thừa và từ khóa virtual trong c#
- Base64 và Cache Image trong LocalStorage
- PerformanceNavigation và cách thức truy cập Website (Page)
- SqlCommandBuilder với Insert, Update và Delete dữ liệu từ DataGridview đến Database
- Kết nối SQLite bằng Entity framework
- SQL SERVER: Sử dụng INDEX để tăng tốc độ thực thi câu truy vấn
- MachineKey là gì
- HTML5 Web Workers là gì
- Lưu trữ cục bộ trong HTML5: Local Storage và Session Storage
- Angular Tree
Phản Hồi Mới
-
Angular Tree
ad
-
Kế thừa và từ khóa virtual trong c#
ssd
-
Sử dụng chrome trong lập trình web
Thèn Khương nói tào lao quá
-
Angular Tree
content mà mè mmex nè ne
- Các định lý của đại số logic (Boolean) Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
- Các định lý của đại số logic (Boolean) Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
- Các định lý của đại số logic (Boolean) Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
- Các định lý của đại số logic (Boolean) Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Phản Hồi
04:56:32 Nov 10, 2017
dd
ssd