为什么在TComponent的派生类中无Create方法? 所有的类都是从TObject中继承的,TObject类中的方法也应当被所有的子类所约继承,但为何在TComponent的子类中无没有带有参数的create方法?而只有带有参数的Create(...)的方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 create的参数是可以设置为NIL的,如果这样,父类析构的时候对象是不会自动释放,所以一般create方法的参数为父类对象,由于object是基类所以没有父类对象 这我明白,我不明白的是,为何从TComponet继承下的类都没有无参数的Create方法?如:TTest=class(TComponent)end;var a:TTest;begin a:=TTest.create;//这句报错。 ...end;而按继承的概念来讲,父类除私有private限制的字段及方法,属性子类不能继承,其他的如public,protected,published段中的属性,字段,方法都可以被子类所继承,也就是可以使用。TObject中的这些方法都应该是子类可以继承的呀。 constructor Create(AOwner: TComponent); virtual;TComponet的构造器被重新定义了,所以不能再使用TOBJECT的CREATE了,必须传递一个TComponet参数,当然这个参数可以使用NIL。 面像对像不仅有继承,还有覆盖了类可以继承父类的方法,也可以隐藏父类的方法(通过取与父类相同方法的函数名)TObject.Create是个静态方法,TComponent 重写了 Create 函数,并且没有重载,所以没带参数的Create方法被这个方法隐藏了。 to stealDream:那是不是能在TComponent的create(..)方法中用inherited create调用TObject的Create方法呢? 是的,不过没有必要,因为VCL对每个类的Create是一样对待的。假设你的Ttest类从TObject继承下来,且没有写自己的构造函数,则TTest.create时它调用的是Tobject的Create,如果TTest类有写构造函数Create,则TTest.Create时它调用自己的构造函数,这时它是不会去调用TObject的构造函数的,因为没有必要,TTest自己的构造函数就会执行分配对象内存等操作。而TComponent的Create(...)也是一样的,只不过它要作一些组件特性的操作,所以要设为虚方法,让子类继承时覆盖它,并Inherited它。 MDI登录问题:index out of bound(0) 问一个关于QReport控件组的一个问题 请问用access+ado好,还是用DBISAM好 菜鸟问题,请高手指点 请问char类型如何转化成string类型,反过来怎么做啊 谁有fastreport的注册码 急用! 在线等待!!! 关于类似QQ千夫指的问题。 dcomconnection能不能跨域访问? 请问高手远程控制的问题~ 关于远程连接服务器端程序注册的问题 客户端用clientsocket,当客户端网线断后,不启动客户端联不上服务器,不知道怎么办啊 各位大侠,来俺就给分!程序中的最后的唯一问题。
如:
TTest=class(TComponent)
end;var
a:TTest;
begin
a:=TTest.create;//这句报错。
...
end;而按继承的概念来讲,父类除私有private限制的字段及方法,属性子类不能继承,其他的如public,protected,published段中的属性,字段,方法都可以被子类所继承,也就是可以使用。TObject中的这些方法都应该是子类可以继承的呀。
TComponet的构造器被重新定义了,所以不能再使用TOBJECT的CREATE了,必须传递一个TComponet参数,当然这个参数可以使用NIL。
TObject.Create是个静态方法,TComponent 重写了 Create 函数,并且没有重载,所以没带参数的Create方法被这个方法隐藏了。
假设你的Ttest类从TObject继承下来,且没有写自己的构造函数,则TTest.create时它调用的是Tobject的Create,如果TTest类有写构造函数Create,则TTest.Create时它调用自己的构造函数,这时它是不会去调用TObject的构造函数的,因为没有必要,TTest自己的构造函数就会执行分配对象内存等操作。
而TComponent的Create(...)也是一样的,只不过它要作一些组件特性的操作,所以要设为虚方法,让子类继承时覆盖它,并Inherited它。