• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Shadows vs Overrides?

Nơi trao đổi, hỏi đáp về hướng đối tượng (OOP - Object-Oriented Programming), không giới hạn về ngôn ngữ lập trình
Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Shadows vs Overrides?

Gửi bàigửi bởi vo_minhdat2007 » T.Bảy 20/08/2011 10:58 am

Như tiêu đề đã ghi, các bạn nghĩ thế nào về Shadows và Overrides? Ta nên dùng cái nào? Lý do?



Hình đại diện của người dùng
haitu
Guru
Guru
Bài viết: 206
Ngày tham gia: T.Bảy 10/09/2005 2:50 pm
Has thanked: 1 time
Been thanked: 19 time
Liên hệ:

Re: Shadows vs Overrides?

Gửi bàigửi bởi haitu » T.Ba 23/08/2011 3:39 pm

:) shadows thì chưa dùng bao giờ, hình như nó giống hàm ảo hay thuần ảo trong java gì đó, còn Overrides thì dùng để kế thừa lại lớp cũ đã xây dựng trước đó và có thể viết thêm những thứ mà mình muốn.

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: Shadows vs Overrides?

Gửi bàigửi bởi vo_minhdat2007 » T.Ba 23/08/2011 3:46 pm

Shadows chỉ có trên .NET thôi anh haitu, Java không có đâu. Nhiều người đánh giá Shadows là thứ dư thừa của Microsoft, "đánh đố" trình biên dịch. Nó chỉ là ẩn một thuộc tính nào đó của đối tượng đối với lớp con, nhưng thực tế chỉ là che mắt lập trình viên, còn muốn truy cập vẫn ok như thường.

Hình đại diện của người dùng
haitu
Guru
Guru
Bài viết: 206
Ngày tham gia: T.Bảy 10/09/2005 2:50 pm
Has thanked: 1 time
Been thanked: 19 time
Liên hệ:

Re: Shadows vs Overrides?

Gửi bàigửi bởi haitu » T.Ba 23/08/2011 3:49 pm

ý anh là cách sử dụng đó, nhưng không biết có giống hông vì chưa sử dụng nó :d

vominhdat2007 đã viết:Nhiều người đánh giá Shadows là thứ dư thừa của Microsoft, "đánh đố" trình biên dịch. Nó chỉ là ẩn một thuộc tính nào đó của đối tượng đối với lớp con, nhưng thực tế chỉ là che mắt lập trình viên, còn muốn truy cập vẫn ok như thường.


hehehe không có gì mà Microsoft làm dư cả đâu Đạt, chẳng qua là do mình chưa sử dụng hết chức năng đó thôi. Nếu đúng như Shadows dùng để ẩn 1 số thuộc tính nào đó của đối tượng thì việc Microsoft làm ra nó rất hữu ích cho mình khi lập trình liên quan đến tài khoản ngân hàng của khách hàng. vì mình vẫn quản lý đầy đủ các thông tin về tài khoản (tên, số tiền...), nhưng có 1 số thuộc tính "nhạy cảm" mà mình cần giấu đi kg cho người khác biết, tuy nhiên nó vẫn tồn tại và xử lý được

Hình đại diện của người dùng
alexanderdna
Guru
Guru
Bài viết: 214
Ngày tham gia: T.Ba 14/07/2009 11:13 am
Đến từ: Sài Gòn
Has thanked: 3 time
Been thanked: 15 time

Re: Shadows vs Overrides?

Gửi bàigửi bởi alexanderdna » T.Ba 23/08/2011 6:47 pm

Từ thủa xài .NET tới nay tôi ít khi rớ tới Shadows. Nhưng hãy thử xét mã sau:
  1. class Alejo
  2. {
  3.     static void Main()
  4.     {
  5.         // biến kiểu Belero, nhưng đối tượng kiểu Drago
  6.         Belero blr = new Drago();
  7.         blr.Federo();
  8.        
  9.         Console.WriteLine();
  10.     }
  11.    
  12.     class Belero
  13.     {
  14.         public virtual void Federo()
  15.         {
  16.             Console.WriteLine("Belero.Federo()");
  17.         }
  18.     }
  19.    
  20.     class Drago : Belero
  21.     {
  22.         new public void Federo()
  23.         {
  24.             Console.WriteLine("Drago.Federo() new");
  25.         }
  26.     }
  27. }

Kết quả trên màn hình là Belero.Federo().

Điều đó có nghĩa là phương thức Shadows không tái định nghĩa phiên bản ở lớp cơ sở, mà che nó đi (vậy nên mới gọi là Shadows). Nếu thay new public void Federo() thành override public void Federo() thì màn hình mới hiện lên Drago.Federo().

Vậy, có thể một trong các tác dụng của Shadows là bắt buộc việc gọi phương thức phải chọn phiên bản của lớp cơ sở, hoặc là bắt buộc dùng kiểu lớp dẫn xuất để gọi đúng phương thức ở lớp dẫn xuất, chứ không thể callvirt.

Còn bắt buộc để làm gì thì... tùy chương trình. :>
Sửa lần cuối bởi alexanderdna vào ngày T.Ba 19/03/2013 9:21 am với 1 lần sửa.

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: Shadows vs Overrides?

Gửi bàigửi bởi vo_minhdat2007 » T.Ba 23/08/2011 7:52 pm

Hì, đúng là box OOP xem ra chỉ toàn guru thảo luận, chưa thấy đông đảo thành viên tham gia. Thực ra về Shadows mình đã biết, chỉ tạo topic nhằm khuyến khích mọi người cùng nhau góp sức để tìm hiểu mà thôi!

FlyingFox
Guru
Guru
Bài viết: 770
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Shadows vs Overrides?

Gửi bàigửi bởi FlyingFox » T.Ba 23/08/2011 8:08 pm

Với Overrides thì nó chĩ dùng ở lớp con khi tên cũa Function hay Sub có cùng tên ở lớp cha với điều kiện lớp cha có cùng Access Level (Public, Protected, Private) và có từ khóa Overridable.
Còn với Shadows thì nó được dùng rộng rãi hơn khi nó dùng cùng tên với Function, Sub, Variable, ... .mà không cần ở lớp cha có từ khóa Overridable (trường hợp này thường được gặp khi tạo các control được thừa kế từ những control hay class nào có sẵn chẳng hạn từ ComboBox). Ngoài ra nó có thể thay đổi được Access Level, do đó theo mình thì cái này chính là dùng để che đó.

Hình đại diện của người dùng
lipton150786
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 345
Ngày tham gia: T.Năm 18/11/2010 10:00 pm
Has thanked: 3 time
Been thanked: 29 time

Re: Shadows vs Overrides?

Gửi bàigửi bởi lipton150786 » T.Năm 25/09/2014 12:06 pm

vậy tạo shadow như thế nào?
và làm sao chỉnh độ dày hay mỏng của shadow(ái bóng dài hay ngắn) cho một form
mình tìm thì thấy cái code này giúp tạo cho form có shadow nhưng không biết chỉnh cho
shadow nó dài hơn giống nhưng shadow trõng excel. ai biết chỉ với

code:

protected override CreateParams CreateParams
{
get
{
//return base.CreateParams;
const int CS_DROPSHADOW = 0x00020000;
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}


Quay về “Lập trình hướng đối tượng (OOP)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách