是否可以在泛型方法中使用其内部构造函数构造一个对象?
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
与 Foo
位于同一个程序集中。类调用工厂方法是这样的:var foo = FooFactory.CreateFoo<Foo>();
他们得到编译时错误:
有没有办法解决这个问题?
我也试过:
Activator.CreateInstance<TFooResult>();
这会在运行时引发相同的错误。
最佳答案
您可以删除 new()
约束并返回:
//uses overload with non-public set to true
(TFooResult) Activator.CreateInstance(typeof(TFooResult), true);
尽管客户也可以这样做。但是,这很容易出现运行时错误。
这是一个很难以安全方式解决的问题,因为该语言不允许抽象构造函数声明。
关于c# - 使用内部构造函数创建泛型类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3650707/