2015-07-03 18 views
6

Trang trí lớp hoặc tham số có nghĩa là gì?
Mục đích và thời điểm tôi sẽ làm điều này?Trang trí lớp hoặc tham số có nghĩa là gì?

Liên kết đến tài nguyên và câu trả lời trực tiếp đều được chào đón.

Cảm ơn.

+1

Nhìn này? http://www.codeproject.com/Articles/479635/UnderstandingplusandplusImplementingplusDecoratorp –

+1

Bạn có thể trang trí các lớp và các thành viên lớp với các thuộc tính. Về cơ bản các thuộc tính này là một lớp khác bắt nguồn từ lớp System.Attribute cung cấp một số thông tin bổ sung. Bạn có thể tìm thêm thông tin tại đây: https: // msdn.microsoft.com/en-us/library/aa288454(v=vs.71).aspx – Fabjan

+2

Trong C# điều này có thể có nghĩa là sử dụng Thuộc tính hoặc mẫu trang trí. Tôi giả sử ý bạn là Thuộc tính vì chúng áp dụng cho cả Lớp và tham số. – nozzleman

Trả lời

3

Trang trí là một trong 26 mẫu gốc được mô tả trong cuốn Gang of Four "Design Patterns". Họ mô tả nó tốt here.

Tóm tắt:

Decorator: Thêm chức năng bổ sung để một lớp học trong thời gian chạy nơi subclassing sẽ cho kết quả trong một gia tăng theo cấp số nhân của các tầng lớp mới

Patterns là ngôn ngữ thuyết bất khả tri. Chúng là mô tả các giải pháp cho các vấn đề chung trong lập trình hướng đối tượng. Có thể, thậm chí còn được ưa thích hơn, để thảo luận chúng mà không cần tham chiếu đến một ngôn ngữ cụ thể. Các ví dụ trong cuốn sách gốc được viết bằng C++ và Smalltalk. Cả Java lẫn C# đều chưa tồn tại khi sách được xuất bản lần đầu vào năm 1995.

3

Khi bạn thêm trang trí trong C# nó giống như thêm thuộc tính vào lớp/phương thức. Sẽ có một thuộc tính gắn liền với nó.

Nếu Bạn viết bài kiểm tra đơn vị Bạn sẽ gặp một trang trí đơn giản TestMethod như thế:

[TestMethod] 
public void TestMethod1() 
{ 
} 

Khung sẽ sử dụng trang trí để kiểm tra những gì thử nghiệm phương pháp này nằm trong bộ thử nghiệm.

Bạn có thể kiểm tra trên thuộc tính here

Có một tốt đẹp để đọc bài viết về Writing Custom Attributes

trang trí không giới hạn ở những '[]' hình thức trang trí. Ngoài ra còn có một mẫu thiết kế cho rằng, đã được đề cập trước đó bởi những người khác.

1

Trang trí một lớp nghĩa là thêm chức năng vào lớp hiện có. Ví dụ, bạn có một lớp học SingingPerson có tài năng ca hát.

public class SingingPerson 
{ 
    public string Talent = "I can sing"; 
    public string DoTalent() 
    { 
     return Talent; 
    } 
} 

Sau đó, bạn quyết định rằng lớp SingingPerson cũng có thể nhảy nhưng không muốn thay đổi cấu trúc lớp hiện có. Những gì bạn làm là bạn trang trí lớp SingingPerson bằng cách tạo một lớp khác có chứa chức năng bổ sung. Lớp mới này mà bạn sẽ tạo ra sẽ mất một đối tượng SinginPerson.

public class SingingAndDancingPerson { 
    SingingPerson person; 
    public string Talent { get; set; } 
    public SingingAndDancingPerson(SingingPerson person) 
    { 
     this.person = person; 
    } 

    public string DoTalent() 
    { 
     this.Talent = person.Talent; 
     this.Talent += " and dance"; 
     return this.Talent; 
    } 
} 

Khi bạn cố gắng để tạo ra các trường hợp của các lớp đầu ra sẽ là như sau:

SingingPerson person1 = new SingingPerson(); 
     Console.WriteLine("Person 1: " + person1.DoTalent()); 
     SingingAndDancingPerson person2 = new SingingAndDancingPerson(person1); 
     Console.WriteLine("Person 2: " + person2.DoTalent()); 
     Console.ReadLine(); 
+0

Nhưng nó cũng có nghĩa là để __not__ lớp con, không? – TaW

+0

@TaW ý của bạn là gì đối với 'không phải là phân lớp'? – jmc

Các vấn đề liên quan