2012-01-19 24 views
7

Gần đây tôi đã đọc về các thuộc tính và phản chiếu và tôi nghĩ đó sẽ là một phương pháp tốt để bao gồm siêu dữ liệu trong chương trình của tôi. Tôi có lớp trừu tượng này và tôi muốn tất cả các lớp thừa hưởng từ nó để khai báo với lớp một số thuộc tính, vì tôi muốn các thành phần tùy chỉnh (các lớp dẫn xuất) được tạo cho chương trình của tôi và muốn đọc siêu dữ liệu của các lớp này trong thời gian chạy. Tuy nhiên, các lớp dẫn xuất tất cả đều phải khai báo rõ ràng thuộc tính trong đó tôi lưu trữ siêu dữ liệu. Vì vậy, làm thế nào để tôi buộc một tuyên bố thuộc tính trong các lớp học có nguồn gốc? Cảm ơn.Tuyên bố thuộc tính lực trong các lớp có nguồn gốc

Trả lời

4

Xác định lớp thuộc tính của bạn để có thuộc tính AttributeUsageAttribute trong đó thuộc tính Inheritedtrue.

Hoặc không, vì đó là mặc định ...

mục tiêu nguồn gốc (có nghĩa là, các lớp học nếu các thuộc tính là trên một lớp, phương pháp nếu nó là trên một phương pháp, vv) sau đó sẽ kế thừa thuộc tính mà không khai báo rõ ràng. Tuy nhiên,

+0

tuyệt vời! cảm ơn. – irisjay

2

Nếu bằng "lực lượng", nghĩa là "thực thi thời gian biên dịch": Bạn không thể.

1

Như Daniel đã nói, bạn không thể thực thi các thuộc tính lúc biên dịch.

Nhưng nếu bạn muốn đọc dữ liệu trong thời gian chạy, tại sao phải bận tâm với thuộc tính và phản ánh? Bạn có thể tạo phương thức trừu tượng trong lớp trừu tượng của mình:

abstract class Base 
{ 
    public abstract string Metadata(); 
} 

class Derived1 : Base 
{ 
    public override string Metadata() 
    { 
     return "Metadata for Derived1"; 
    } 
} 

class Derived2 : Base // won't compile, since Metadata has not been provided 
{ 
} 

Hành vi này hơi khác, tất nhiên. Với tùy chọn này, bạn cần tham chiếu đến cá thể của lớp dẫn xuất thay vì chỉ thông tin kiểu. Mặt khác, nó tránh sự phản chiếu.

+0

tuy nhiên, vấn đề là tôi muốn tìm nạp siêu dữ liệu đơn giản từ assembly, mà không có bất kỳ cá thể lớp nào. Làm thế nào tôi có thể làm điều đó? – irisjay

+0

@testgo: Tôi sợ, cách giải quyết được đề xuất của tôi không thể sử dụng được cho bạn sau đó. – Heinzi

1

Như Daniel nói bạn không thể ép buộc lúc biên dịch. Bạn có thể thêm (các) thuộc tính cho phụ huynh trừu tượng và chọn chúng.

Tùy chọn khác là thêm phương thức để kiểm tra sự tồn tại của thuộc tính trong lớp cha và ném ngoại lệ nếu không có. Gọi đó là từ các phương pháp phù hợp.

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