【问题标题】:Do derived classes inherit differently?派生类的继承方式不同吗?
【发布时间】:2011-01-07 05:40:50
【问题描述】:
System.Web.UI.WebControls.UI.TableHeaderCell

派生自

System.Web.UI.WebControls.UI.TableCell

所以一个带有签名foo(TableCell tc){}的方法

将接受 TableHeaderCell 的实例。

但是,如果我创建两个新类并从 TableCell 派生一个,另一个从 TableHeaderCell 派生,那么我的新 TableHeaderCell 类显然无法转换为我的新 TableCell 类,因为它们没有直接关系。

有没有办法解决这个问题?我猜没有。

【问题讨论】:

  • 虽然“很明显”你说的是真的(参见 Jon 的图表),但这并不是因为“派生类继承方式不同”。只是因为 C# 没有多重继承。

标签: c# casting derived-class


【解决方案1】:

你的意思是这样的等级制度?

                  TableCell
                 /         \
                /           \
        TableHeaderCell   CustomTableCell
              /
             /                
  CustomTableHeaderCell

不,在这种情况下,您不能将 CustomTableHeaderCell 转换为 CustomTableCell

你确定在这种情况下你真的需要继承吗?你能用合成来代替吗?或者你可以让CustomTableCellCustomTableHeaderCell 实现ICustomCell 接口吗?如果您可以向我们提供有关您正在尝试做的事情的更多信息,那将会有所帮助。

【讨论】:

    【解决方案2】:

    您可以继续将它们都称为 TableCell 对象,至少如果目标是能够调用您的 foo()。

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 2015-01-20
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      相关资源
      最近更新 更多