конструктор как делегат - действительно ли это возможно в C#?

У меня есть класс как ниже:

class Foo
{
  public Foo(int x) { ... }
}

и я должен передать определенному методу делегата как это:

delegate Foo FooGenerator(int x);

Действительно ли возможно передать конструктора непосредственно как a FooGenerator значение, не имея необходимость вводить:

delegate(int x) { return new Foo(x); }

?

Править: Для моего персонального использования вопрос относится к.NET 2.0, но подсказки/ответы для 3,0 + приветствуются также.

57
задан 21 October 2009 в 18:47

1 ответ

Другая опция состояла бы в том, чтобы использовать Activator класс, как так:

Используя Универсальные Типы

public delegate Foo FooGeneratorDelegate<T>(int x);

public T FooGeneratorFunction<T>(int x)
{
    return (T)Activator.CreateInstance(typeof(T), x);
}

// implementation example
FooGeneratorDelegate<Foo> del = FooGeneratorFunction<Foo>;
Foo foo = del(someIntValue);

Передача Вашего Нечто Типа в качестве параметра

public delegate object FooGeneratorDelegate(Type t, int x);

public object FooGeneratorFunction(Type t, int x)
{
    return Activator.CreateInstance(t, x);
}

// implementation example
FooGeneratorDelegate del = FooGeneratorFunction;
Foo foo = (Foo)del(typeof(Foo), someIntValue);

, Если Тип будет Всегда иметь Тип Foo

public delegate Foo FooGeneratorDelegate(int x);

public Foo FooGeneratorFunction(int x)
{
    return (Foo)Activator.CreateInstance(typeof(Foo), x);
}

// implementation example
FooGeneratorDelegate del = FooGeneratorFunction;
Foo foo = del(someIntValue);
0
ответ дан 1 November 2019 в 16:36

Другие вопросы по тегам:

Похожие вопросы: