c# - 重载与泛型或多态性

标签 c# oop generics polymorphism overloading

假设我们正在尝试编写一个辅助扩展方法来为 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

原因:

  1. 三个重载使客户端开发人员可以清楚地知道该方法接受哪种数据。

  2. 在不破坏客户端代码中对方法的现有调用的情况下,通过添加更多重载更容易扩展功能。

  3. 当客户端开发人员不小心传递了他们不想要的东西时,您当前的实现很容易导致错误。由于参数是object,编译器不可能检查类型的正确性。最好要求客户端有一个显式的 .ToString() 来明确表示这是正在做的事情。

关于c# - 重载与泛型或多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621162/

相关文章:

c# - 在c#中使用公钥加密数据,在php中使用私钥解密数据

c++ - 在模板函数中提示祖先类型

c# - 检查一个字符是否等于多个其他字符,分支越少越好

c# - 使用 Javascript 更改隐藏字段的值

java - 反射 - 使用未知数量的构造函数参数获取未知类的新实例

generics - 支持 null 的结构和引用类型的类型约束

c# - 类型推断是从右到左进行的吗?

c# - 拦截泛型类中的方法调用

javascript - 上传后双倍大小的文件

linux - 使用来自另一个类的条目将项目添加到列表框