Обрабатывать неизвестные типы без приведения - PullRequest
1 голос
/ 29 февраля 2020

Я пытался найти элегантное решение для повторяющейся проблемы в небольшой библиотеке, которую я пишу в C#.

Вот описание проблемы.

// IMPLEMENTATION

public class MyArgs : Args {}

public class MyItem : Item
{
    public override void Run(Args args)
    {
        // CAN I AVOID THIS CAST?
        var myArgs = args as MyArgs;
    }
}


// LIBRARY

public class Args {}

public abstract class Item
{
    public abstract void Run(Args args);
}

public class Manager
{
    public List<Item> items;

    public void RunAll (Args args)
    {
        foreach (Item item in items)
        {
            item.Run(args);
        }
    }
}

Так что, в принципе, я хотел бы иметь возможность отправлять MyArgs в MyItem через менеджера, не подозревая об этом. MyArgs - это что-то определенное пользователем, поэтому я буду знать только его базовый класс.

Я пробовал некоторые решения с использованием таких обобщений, как, например, которые решат проблему:

public abstract class Item<T>
{
    public abstract void Run(T args);
}

Но я Я хотел бы избежать создания обобщенного менеджера c.

Так что я думаю, у меня вопрос, есть ли какие-нибудь приемы, которые я могу использовать, чтобы обойти это, или я просто пытаюсь сделать что-то, что невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...