C# 派生类继承方式是否不同?

C# 派生类继承方式是否不同?,c#,casting,derived-class,C#,Casting,Derived Class,源于 System.Web.UI.WebControls.UI.TableHeaderCell 所以一个签名为foo(TableCell tc){} 将接受TableHeaderCell的实例 但是,如果我创建两个新类,其中一个派生自TableCell,另一个派生自TableHeaderCell,那么我的新TableHeaderCell类显然无法转换到我的新TableCell类中,因为它们没有直接的关联 有什么办法可以解决这个问题吗?我猜不会。你是说这样的等级制度 System.Web.UI.

源于

System.Web.UI.WebControls.UI.TableHeaderCell
所以一个签名为
foo(TableCell tc){}

将接受TableHeaderCell的实例

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


有什么办法可以解决这个问题吗?我猜不会。你是说这样的等级制度

System.Web.UI.WebControls.UI.TableCell
不,在这种情况下,您无法将
CustomTableHeaderCell
强制转换为
CustomTableCell


你确定在这种情况下你真的需要继承吗?你能用作文代替吗?或者您可以让
CustomTableCell
CustomTableHeaderCell
实现
ICustomCell
接口吗?如果你能给我们更多关于你想做什么的信息,那会有帮助。

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

虽然你说的是“显而易见的”(见Jon的图表),但这并不是因为“派生类继承方式不同”。这仅仅是因为C#没有多重继承。
                  TableCell
                 /         \
                /           \
        TableHeaderCell   CustomTableCell
              /
             /                
  CustomTableHeaderCell