我想看看是否有辦法讓包裝類在運行時將屬性附加到自身,或者從包裝類繼承某些元數據的方式。通過包裝器傳遞類元數據
我希望這不是太長,但是這是我有:
首先是代表將命令發送到設備的某一類:
public interface IDeviceCommand
{
string Name { get; }
byte[] ToByteArray();
}
public class SomeCommand : IDeviceCommand
{ ... }
public class SomeOtherCommand : IDeviceCommand
{ ... }
命令可以發送到從應用程序的各個位置的裝置中,但某些命令比其他更重要,所以還定義一個標記接口IPriorityCommand
,表示該命令應當被立即發送:
// this could also be an attribute btw
public interface IPriorityCommand { }
而且我的指揮調度,然後檢查此:
public void SendCommand(IDeviceCommand command)
{
if (command is IPriorityCommand)
SendNow(command);
else
Enqueue(command);
}
此外,命令有時也需要被包裝以改變它們的內容了一下,或者增加一些其他的功能:
public SomeCommandWrapper : IDeviceCommand
{
readonly IDeviceCommand _innerCommand;
public CommandWrapper(IDeviceCommand inner)
{ _innerCommand = inner; }
// acts as a proxy, or changes data in a certian way
}
但現在我的問題是包裝器實例不再實現優先級命令。另外,我有幾個包裝類型,所以每個包裝的兩個版本沒有意義,只有它們的接口不同。
我也可以使用屬性而不是接口,但我不知道如何在運行時設置對象的屬性,如果它甚至是可能的。
另外一個問題是,這些命令包裝中的一些是通用的,即在不知道任何關於IPriorityCommand
的程序集中定義。
+1謝謝,一個問題可能是'IDeviceCommand'是在一個單獨的程序集中實現的,我的程序集引用它並擴展了調度程序。 – Lou
但派生的調度員仍然可以訪問優先級,因爲它是公共的?我錯了什麼? –
所以你沒有IDeviceCommand的源代碼? –