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
Xác định lớp thuộc tính của bạn để có thuộc tính AttributeUsageAttribute
trong đó thuộc tính Inherited
là true
.
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,
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ể.
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.
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.
- 1. C# ẩn Thuộc tính trong nguồn gốc Lớp
- 2. Tuyên bố thuộc tính lớp: riêng tư và công khai
- 3. C++ - "chức năng thành viên không tuyên bố" trong nguồn gốc lớp
- 4. JSTL if-tuyên bố bên trong HTML thuộc tính
- 5. Đặt hai thuộc tính bằng nhau trong tuyên bố
- 6. Sử dụng <T> trong thuộc tính của lớp tuyên bố trong C#
- 7. nguồn gốc lớp Constructor Calls
- 8. Tuyên bố, tuyên bố, tuyên bố
- 9. Lớp có nguồn gốc cho Ruby Thread?
- 10. Nhiều lớp trừu tượng có nguồn gốc?
- 11. Phương thức thiết lập thuộc tính không được tìm thấy trong một loại có nguồn gốc
- 12. injecting tài sản có nguồn gốc cho @Repository đậu mà không @Autowired trong siêu lớp
- 13. WCF DataContract Loại trừ DataMembers Từ Đang tuần tự hóa trong các lớp có nguồn gốc
- 14. C++ mẫu đúc với các lớp học có nguồn gốc
- 15. Bao gồm các mô hình có nguồn gốc Lớp liên quan
- 16. Gỡ rối "Tuyên bố sử dụng với tên không hợp chất ... không có hiệu lực"
- 17. Cách xác định thuộc tính có nguồn gốc trong đối tượng Matlab
- 18. Truy cập <tuyên bố-styleable> nguồn programatically
- 19. video có nguồn gốc chéo trong Safari
- 20. Mở rộng Lớp tuyên bố PDO
- 21. Thêm bộ truy cập vào thuộc tính trong lớp có nguồn gốc từ lớp trừu tượng chỉ có trình truy cập có được
- 22. Có thể xác định các thuộc tính khác nhau cho các lớp đệ quy trong F #
- 23. Các do-while tuyên bố
- 24. Tại sao tôi cần "trường": trong tuyên bố thuộc tính của tôi "[field: NonSerialized]"?
- 25. Python: Bắt giá trị baseclass từ lớp có nguồn gốc
- 26. SELECT tuyên bố trong JAVA
- 27. Mô hình ASP.NET MVC 3.0 ràng buộc với các lớp cơ sở và có nguồn gốc?
- 28. C++ tham khảo lớp cơ sở khởi với đối tượng khác nhau có nguồn gốc lớp
- 29. Lớp bắt nguồn lực để gọi hàm cơ sở
- 30. Ghi đè các trường hoặc thuộc tính trong lớp con
tuyệt vời! cảm ơn. – irisjay