Est-il possible de construire un objet avec son constructeur interne au sein d'une méthode générique?Créer une classe générique avec constructeur interne
public abstract class FooBase { }
public class Foo : FooBase {
internal Foo() { }
}
public static class FooFactory {
public static TFooResult CreateFoo<TFooResult>()
where TFooResult : FooBase, new() {
return new TFooResult();
}
}
FooFactory
réside dans le même ensemble que Foo
. Les classes appellent la méthode d'usine comme ceci:
var foo = FooFactory.CreateFoo<Foo>();
Ils obtiennent l'erreur de compilation:
'Foo' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TFooType' in the generic type or method 'FooFactory.CreateFoo()'
est-il un moyen de contourner ce problème?
J'ai essayé aussi:
Activator.CreateInstance<TFooResult>();
Cela pose la même erreur lors de l'exécution.
Bizarrement, je ne reçois pas d'erreur avec votre code dans .NET 4. Je ne sais pas si cette restriction a été assouplie? Était-ce une erreur de compilation ou d'exécution? –
Ah, je cours .NET 3.5. Je vais creuser. C'était une erreur de compilation. –
Dans ce cas, voir ma réponse. –