我有一个看起来像这样的C#类:
public abstract class Department<T> where T : ShoppingItem
{
protected string Name { get; set; }
protected string Description { get; set; }
}
然后,我想从Department
派生两个类。这些类中的每一个也必须与ShoppingItem
元素一起使用。目前,我有:
public class ClothingDepartment<T> : Department<T> where T : ShoppingItem
{
...
}
当我尝试初始化ClothingDepartment
时,出现错误。我正在尝试像这样初始化它:
var department = new ClothingDepartment();
我得到的错误是Using the generic type ClothingDepartment<T> requires 1 type arguments
。我不明白。
我还想在接口旁边使用约束。但是,我也没有运气。
答案 0 :(得分:0)
就像错误提示一样,您在实例化类时需要传递类型参数。由于类型参数的限制,您将需要传递ShoppingItem类或从ShoppingItem继承的类。编译器将构建一个ClothingDepartment类,其中所有“ T”引用都将被您传递的ShoppingItem类替换。
在像这样新建类时传递类型参数:
var department = new ClothingDepartment<ShoppingItem>();
答案 1 :(得分:0)
您的课程是通用类,需要派生ShoppingItem类。
var department = new ClothingDepartment<DerivedShoppingItem>();
public class DerivedShoppingItem : ShoppingItem
{
DerivedShoppingItem() : base()
{
}
....
}
答案 2 :(得分:0)
如果您不想使用new ClothingDepartment();
public class ClothingDepartment : Department<ShoppingItem>
{
...
}
答案 3 :(得分:0)
作为将Type传递到ClothingDepartment<T>
的type参数中的一种替代方法,您可以直接在Department<T>
类定义中指定ClothingDepartment
的type参数。例如,如果ClothingDepartment
应该始终将Shirt
用作ShoppingItem
,则可以执行以下操作:
public class ClothingDepartment : Department<Shirt>
{
...
}
这将允许您实例化ClothingDepartment
,而无需使用类型参数:
var department = new ClothingDepartment();
答案 4 :(得分:0)
使用购物项目创建其他类别,然后可以像以下方式初始化服装部门:
var clothingDepartment = new ClothingDepartment<Shirt>();
public class Shirt : ShoppingItem
{
}