У меня есть несколько внешних устройств, с которыми я могу общаться через общий API.Определить необходимый класс динамически
string busIdentifier = "BUS:0:1";
var dev = new CommonDeviceDriver(busIdentifier);
Теперь я могу запросить устройство:
string identifier = dev.QueryIdentifier();
Теперь у меня есть несколько конкретных драйверов, например ConcreteDeviceA
, ConcreteDeviceB
и ConcreteDeviceC
. Каждый из драйверов устройства должен иметь «идентификатор».
Теперь я хочу загрузить правильный драйвер устройства для этого ранее запрошенного идентификатора.
Как с этим связаться C#
?
Исходя из python
я хотел бы сделать что-то вроде этого:
# Have a dictionary where key is identifier and value is the class
supported_devices = {ConcreteDeviceA.identifer : ConcreteDeviceA,
ConcreteDeviceB.identifer : ConcreteDeviceB,
ConcreteDeviceC.identifer : ConcreteDeviceC}
busIdentifier = "BUS:0:1"
dev = CommonDeviceDriver(busIdentifier)
identifier = dev.QueryIdentifier()
concrete_device = supported_devices[identifier](dev) # Get class and call constructor
В чем же ваша проблема? Часть словаря? Что вы пробовали на C#? – LightStriker
Ну, есть несколько;). В этом примере «python» все устройства Concrete реализуют интерфейс, гарантирующий, что у них есть статический член «dentifier» -> «static properties» с интерфейсом невозможно. Как создать такое поведение на C#? – Razer
Ну, я вижу, что вы хотите ... В C#, когда вы хотите добавить «идентификацию» к классу, вы не можете сделать это, используя статическое свойство. Однако то, что вы можете сделать, это добавить атрибут в класс, который может хранить данные, относящиеся к этому классу. – LightStriker