读书人

父类型可以强制转换成子类型?解决方案

发布时间: 2012-04-02 19:58:59 作者: rapoo

父类型可以强制转换成子类型?
TcxGridDBColumn(
GridView.VisibleColumns[cbFooterSummaryColumn.ItemIndex]);

GridView.VisibleColumns[cbFooterSummaryColumn.ItemIndex]

VisibleColumns
的类型是TcxGridColumn
property VisibleColumns[Index: Integer]: TcxGridColumn;

2
TcxGridDBColumn = class(TcxGridColumn);

3TcxGridDBColumn 是TcxGridColumn的子类型,但是为什么可以
TcxGridDBColumn(
GridView.VisibleColumns[cbFooterSummaryColumn.ItemIndex]);
这样呢?

父类型可以强制转换成子类型?




[解决办法]
可以,但是最好要加一个判断:
if GridView.VisibleColumns[cbFooterSummaryColumn.ItemIndex] is TcxGridDBColumn


[解决办法]
这个主要是虽然他声明的时候是父类,但是在创建的时候是用子类创建的.

例如经常有这样的代码:
var
S:TStrings


....
S := TStringList.Create;
try
S.Add() //这个ADD的方法实际是TStringList继承的方法
TStringList(S).OnChange := myOnChange;
...
finally
S.free;
end;

[解决办法]
向下转型啊,WHY NOT

读书人网 >.NET

热点推荐