Есть ли название для этого паттерна? (Безопасность типов во время компиляции C # с аргументами «params» разных типов)

Есть ли имя для этого шаблона ?

Допустим, вы хотите создать метод, который принимает переменное количество аргументов, каждый из которых должен быть одним из фиксированного набора типов (в любом порядке или комбинации), а некоторые из этих типов вы не можете контролировать . Обычным подходом было бы, чтобы ваш метод принимал аргументы типа Object и проверял типы во время выполнения:

void MyMethod (params object[] args)
{
    foreach (object arg in args)
    {
        if (arg is SomeType)
            DoSomethingWith((SomeType) arg);
        else if (arg is SomeOtherType)
            DoSomethingElseWith((SomeOtherType) arg);
        // ... etc.
        else throw new Exception("bogus arg");
    }
}

Однако, допустим, что, как и я, вы одержимы безопасностью типов во время компиляции и хотите иметь возможность для проверки типов аргументов вашего метода во время компиляции. Вот подход, который я придумал:

void MyMethod (params MyArg[] args)
{
    // ... etc.
}

struct MyArg
{
    public readonly object TheRealArg;

    private MyArg (object obj) { this.TheRealArg = obj; }

    // For each type (represented below by "GoodType") that you want your 
    // method to accept, define an implicit cast operator as follows:

    static public implicit operator MyArg (GoodType x)
    { return new MyArg(x); }

}

Неявное приведение типов позволяет вам передавать аргументы допустимых типов непосредственно в вашу подпрограмму, без необходимости их явного приведения или обертывания. Если вы попытаетесь передать значение неприемлемого типа, ошибка будет обнаружена во время компиляции.

Я уверен, что другие использовали этот подход, поэтому мне интересно, есть ли имя для этого шаблона.

19
задан George Duckett 3 August 2011 в 14:12
поделиться