某个班级

时间:2015-06-03 03:14:08

标签: c# design-patterns

我想知道是否有办法将Type变量仅限制为某个类。例如

    public class Product
    {
       public string Name;
       public bool Install;

       public List<Type> Components;
       public List<Type> Prerequisite;
    }

如果可以将List指定为typeof(Product)及其衍生物,我认为这将使我的通用设计更加简单易用。也许是这样:

    public class Product
    {
       public string Name;
       public bool Install;

       public List<Type<Product>> Components;
       public List<Type<Product>> Prerequisite;
    }

你知道一种方法吗?谢谢你的想法。

1 个答案:

答案 0 :(得分:3)

现在,你的问题对我来说似乎很奇怪。您确定没有Product作为组件而不是Type的列表吗?无论如何,这是一种方法:

class Wheel : Product { }
class Engine : Product { }

class Product {
     List<Type> components;

     public IReadOnlyCollection<Type> Components { get { return components } }

     void AddComponent<T>() where T : Product 
     {
         components.Add(typeof(T));
     }   
 }

 var car = new Product();
 car.AddComponent<Engine>();
 car.AddComponent<Wheel>();

所以基本上你可以在编译时注册调用者已知的类型并将其添加到类型列表中。这不允许添加其他类型,因为Components属性是只读的,并且不允许修改生成的集合。

您确定不希望Product的{​​{1}}成为产品吗?

在这种情况下,您可以使用标准polymorphism(具体来说,subtype polymorphism):

Components