Tôi đang xem xét việc tập hợp các đối tượng, giả sử có 3 đối tượng đang hoạt động tại thời điểm này, tất cả đều triển khai giao diện chung và sau đó bao bọc các đối tượng đó đối tượng, cũng thực hiện cùng một giao diện.Tạo lớp cho giao diện trong thời gian chạy, trong C#
Việc triển khai các phương thức và thuộc tính của đối tượng thứ tư chỉ đơn giản là gọi các bit có liên quan trên 3 đối tượng bên dưới đó. Tôi biết rằng sẽ có trường hợp ở đây, nơi nó sẽ không có ý nghĩa để làm điều đó, nhưng điều này là dành cho một kiến trúc dịch vụ multicast vì vậy đã có một bộ tốt các hạn chế tại chỗ.
Câu hỏi của tôi là nơi bắt đầu. Việc tạo ra đối tượng thứ tư đó nên được thực hiện trong bộ nhớ, trong thời gian chạy, vì vậy tôi nghĩ rằng Reflection.Emit
, tiếc là tôi không có đủ kinh nghiệm với điều đó để thậm chí biết bắt đầu từ đâu.
Tôi có phải xây dựng một bộ nhớ trong không? Nó chắc chắn trông như vậy, nhưng tôi chỉ muốn một con trỏ nhanh đến nơi tôi nên bắt đầu. Về cơ bản tôi đang xem xét một giao diện, và một danh sách các cá thể đối tượng đều triển khai giao diện đó, và xây dựng một đối tượng mới, cũng triển khai giao diện đó, "multicast" tất cả các cuộc gọi phương thức và truy cập thuộc tính tới tất cả các đối tượng cơ bản, ít nhất là càng nhiều càng tốt. Sẽ có rất nhiều vấn đề với ngoại lệ và như vậy nhưng tôi sẽ giải quyết các bit đó khi tôi nhận được chúng.
Đây là kiến trúc hướng dịch vụ, nơi tôi muốn có mã hiện có, ví dụ như dịch vụ ghi nhật ký, để truy cập nhiều dịch vụ nhật ký, mà không phải thay đổi mã sử dụng dịch vụ . Thay vào đó, tôi muốn chạy runtime-tạo ra một trình bao bọc-dịch vụ-trình bao mà nội bộ đơn giản gọi các phương thức có liên quan trên nhiều đối tượng bên dưới.
Điều này dành cho .NET 3.5 và C#.
Tôi thực sự đã viết một ví dụ mà đã làm điều này (ở đây trên SO) một vài tháng trước ... Tôi sẽ xem liệu tôi có thể tìm thấy nó ... –
Giống như vậy? http://stackoverflow.com/questions/847809/how-can-i-write-a-generic-container-class-that-implements-a-given-interface-in-c/847975#847975 –
Marc, chọn một cách để giải quyết vấn đề này, đánh dấu câu hỏi là trùng lặp hoặc đăng câu trả lời thực sự mà tôi có thể chấp nhận. –