Вымышленный пример здесь. Предположим, я разработал класс с именем IODevice. Этот класс уже реализует структуру, которая позволяет мне использовать ее следующим образом:
IODevice dio = new IODevice();
try
{
dio.Pin["IsBirdInCageSensor"].Set();
dio.Pin["KillBird"].Get();
//dio.Pin["NonExistant"].Set(); //exception
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Пины здесь представляют собой серию линий ввода-вывода в цифровом блоке ввода-вывода, которые могут быть высокими (1) или низкими (0).
Я хотел бы использовать динамический для вызова следующим образом:
dio.Pins.KillBird.Get();
Мой класс устройств ввода-вывода выглядит следующим образом, и, как вы заметите, я немного продвинулся в том, как реализовать динамический интерфейс, за исключением использования ключевого слова dynamic.
class IODevice
{
public IODevice()
{
pin = new PinCollection();
pin.Add(new Pin("IsBirdInCageSensor", 0));
pin.Add(new Pin("KillBird", 1));
}
private PinCollection pin;
public PinCollection Pin { get { return pin; } }
public dynamic Pins { get; private set; }
}
Второй вопрос: каковы недостатки использования такой конструкции? (кроме отсутствия строгой проверки типов - чего у меня нет в любом случае)