假设我们正在尝试编写一个辅助扩展方法来为 asp.net 添加单元格。 Asp.net TableCell 控件只有一个默认构造函数,在处理高度自定义的数据时可能会很麻烦(忽略与问题无关的此解决方案的基本缺陷)。
多态解决方案
public static void AddCell(this Table table, object cell) {
TableCell tableCell;
if (cell is TableCell) {
tableCell = (TableCell)cell;
} else if (cell is WebControl) {
tableCell = new TableCell();
tableCell.Controls.Add((WebControl)cell);
} else {
tableCell = new TableCell();
tableCell.Text = cell.ToString();
}
table.Rows[table.Rows.Count - 1].Cells.Add(tableCell);
}
问题
这会更好地实现为泛型方法还是多个方法重载?
最佳答案
您应该使用三个重载方法,第三个方法应该采用 string
而不是 object
。
原因:
三个重载使客户端开发人员可以清楚地知道该方法接受哪种数据。
在不破坏客户端代码中对方法的现有调用的情况下,通过添加更多重载更容易扩展功能。
当客户端开发人员不小心传递了他们不想要的东西时,您当前的实现很容易导致错误。由于参数是
object
,编译器不可能检查类型的正确性。最好要求客户端有一个显式的.ToString()
来明确表示这是正在做的事情。
关于c# - 重载与泛型或多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621162/