我有以下课程:
public class ThisClass<T>
{
public T ThisInstance { get; set; }
public int Infoflag { get; set; }
}
我想创建一个静态工厂方法,例如:
public static ThisClass GetNewClass<T>(T instance) =>
new ThisClass<T>()
{
Infoflag = 3
};
我遇到的问题是,因为实例类需要一种类型,所以我不得不这样声明方法:
public static ThisClass<T> GetNewClass(T instance) =>
new ThisClass<T>()
{
Infoflag = 3
};
然后这样称呼它:
ThisClass<SomeClassType>.GetNewClass(instanceClass);
感觉有点麻烦;如果我只能在静态方法的方法上使用类型,那么我将能够使用推断的类型,所以:
ThisClass.GetNewClass(instanceClass);
这是可能的,还是我需要拆分工厂类和实例类?
答案 0 :(得分:1)
只需创建一个静态ThisClass
帮助器类,然后在其中放置静态工厂方法即可:
public static class ThisClass
{
public static ThisClass<T> Create<T>(T instance) =>
new ThisClass<T>()
{
Infoflag = 3
};
}
如果您不希望消费者避免工厂方法而创建ThisClass<T>
实例,则可以将其设为构造函数internal
,以确保外部程序集始终必须调用Create<T>
。您还可以使用其他更复杂的模式来解决此问题,例如将ThisClass<T>
嵌套为ThisClass
(不再是static
)并公开一个接口。遵循以下内容:
public interface IThisClass<T> { ... }
public class ThisClass
{
private class InnerThisClass<T>: IThisClass<T> { ... }
public static IThisClass<T> Create<T>(T instance) => ...
}
没有更多数据,很难找出哪种模式更适合您。