【发布时间】:2018-04-08 22:15:23
【问题描述】:
我有一个问题,我将具有不同类但相同父类的多个项目作为参数传递给类构造函数,然后将它们分配给新类的变量:
public class Tool {}
public class Hammer:Tool {}
public class Screwdriver:Tool{}
所以我的工具类都继承自父工具类。现在我想创建一个工具箱,用来存放我的工具;但是,我并不总是想用一整套工具来制作它,所以我传递了一个参数数量未定义的参数:
public class Toolbox{
public Hammer hammer;
public Screwdriver screwdriver;
public Toolbox(params Tool[] tool){
foreach (Tool t in tool){
switch (t.getType().Name){
case "Hammer":
hammer = t;
break;
case "Screwdriver":
screwdriver = t;
break;
}
}
}
这会导致编译器说它“无法将 'Tool' 隐式转换为 'Hammer',但可以进行显式转换”。 在这种情况下可能是什么问题,是否可以通过一些简单的方式解决?
【问题讨论】:
-
虽然您可以像这样轻松地将 t 转换为 Hammer (Hammer)t,但您应该考虑更改 Toolbox 构造函数的参数列表。目前的设计听起来很糟糕。
-
作为一个业余的 C#-er:为什么这是一个糟糕的设计?我需要将许多具有相同父类的对象传递给构造函数。有什么更好的方法?
-
为什么需要区分它们?难道你不能只有一个工具列表,并且每个工具都有其以不同方式工作的 Use 方法吗?
-
顺便说一句,如果你想让 Stilgar 看到你对他的评论的回答,你需要写 @HisName 这样他就会收到通知你回答了他的评论。
-
我希望它们具有不同的参数,并且设计只能容纳特定类别工具的插槽。参数字典和名称参数区分会更好吗?
标签: c# class inheritance parameters