我有一个界面如何创建工厂为通用类
public interface IProperty<T>
{
T Data { get; set; }
}
public abstract class SomeAbsProperty<T> : IProperty<T> where T : class
{
protected SomeAbsProperty(int param1) {}
public abstract T GetData();
public I Data { get; set; }
}
而且我有一个基于SomeAbsProperty类childres类的列表 他们看起来像(简单的例子)
public sealed class ChildrenProperties : SomeAbsProperty<SomeClasss>
{
public ChildrenProperties(int param1):base(param1) {}
public override object GetData()
{
return new SomeClasss()
}
}
我会喜欢有一些工厂可以建立基于某种类型的特定课程
public static class MyFactory
{
public static SomeAbsProperty<T> CreateObject<T>(PropertyName property) where T : class
{
switch (property)
{
case PropertyName.p1:
return new ChildrenProperties1(siteSettings, packageDateContext);
case PropertyName.p2:
return new ChildrenProperties(siteSettings, packageDateContext);
case PropertyName.p3:
return new ChildrenProperties2(siteSettings, packageDateContext);
case PropertyName.p4:
return new ChildrenProperties3(siteSettings, packageDateContext);
default:
return null;
}
}
}
但compelator不能我clases转换为SomeAbsProperty 什么是正确的行为吗?
只有一个代码应该决定什么具体的类,我们所需要的。它可以是CreateObject或“返回新SomeClass()”。如果我们调用的CreateObject ,并通过对应于ChildrenProperties3属性 什么代码会做什么? –