У меня разные типы объектов в одном родительском классе " Control ".
У меня есть Список , который, как я знаю, может иметь ссылки VideoControl, HtmlControl и т. Д. Все они являются «Control». Отладка также показывает, что приведение во время выполнения правильно анализирует их в относительный Control и присутствуют все другие специфические свойства.
Теперь эти объекты управления включены в два проекта, и я знаю, что используя signalR, я получу сериализованный список объектов управления нескольких типов.
Я хочу вызывать функцию Draw на каждом элементе управления, но мой проект Xamarin.Android знает, как Draw каждый элемент управления по-своему.
foreach (Control control in listControls)
{
try
{
control.Draw(this, myLayout);
}
catch (Exception ex)
{
}
}
P.S. Draw определяется в интерфейсе, поэтому он применяется для каждого элемента управления. Моя проблема в том, что я хочу разрешить всем проектам расширять или предоставлять функции самостоятельно и рисовать каждый элемент управления с моими инкапсулированными данными.
Я много искал и нашел один возможный способ, например Методы расширения , но опять проблема в том, что мне нужно сделать явное приведение типа , что снова сделает мой код длинным и трудным для обработки ,
Для дополнительной помощи я добавляю свои методы Extension, если они могут обрабатываться без явного приведения типов.
public static void Render(this Control Player, object context, object container)
{
}
public static void Render(this VideoPlayer Player, object context, object container)
{
}
public static void Render(this HTMLControl Player, object context, object container)
{
}
public static void Render(this Button Player, object context, object container)
{
}
Если я не набираю приведение, то каждый раз мой метод расширения для Типа Control будет запускаться, но я хочу запустить относительный метод для каждого объекта.
Каким будет возможный способ справиться с этим: какая-то частичная реализация или некоторые методы расширения или каким-либо другим способом.