У меня есть класс как ниже:
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 + приветствуются также.
Другая опция состояла бы в том, чтобы использовать 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);