[Lazarus] Auto adding interface methods
Sven Barth
pascaldragon at googlemail.com
Thu Feb 23 10:22:42 CET 2012
Am 23.02.2012 10:09, schrieb ik:
> On Thu, Feb 23, 2012 at 10:57, Mattias Gaertner
> <nc-gaertnma at netcologne.de> wrote:
>> On Thu, 23 Feb 2012 09:32:14 +0200
>> ik<idokan at gmail.com> wrote:
>>
>>> On Thu, Feb 23, 2012 at 00:45, Mattias Gaertner
>>> <nc-gaertnma at netcologne.de> wrote:
>>>> On Thu, 23 Feb 2012 00:26:32 +0200
>>>> ik<idokan at gmail.com> wrote:
>>>>
>>>>> On Thu, Feb 23, 2012 at 00:09, Mattias Gaertner
>>>>> <nc-gaertnma at netcologne.de> wrote:
>>>>>> On Wed, 22 Feb 2012 23:57:12 +0200
>>>>>> ik<idokan at gmail.com> wrote:
>>>>>>
>>>>>>> Hello,
>>>>>>>
>>>>>>> Is there a shortcut in Lazarus's editor for Adding all of the methods
>>>>>>> that are added to an interface ?
>>>>>>
>>>>>> No. There is already a feature request.
>>>>>>
>>>>>>
>>>>>>> Also, Is there a way to tell Lazarus to foreword the parent methods
>>>>>>> and property for the child's declaration ?
>>>>>>
>>>>>> Can you give an example?
>>>>>
>>>>> TParent = class
>>>>> private
>>>>> FBar : String;
>>>>> FBaz : integer;
>>>>> public
>>>>> procedure Foo;
>>>>>
>>>>> property Bar : String read FBar; write FBar;
>>>>> published
>>>>> property Baz : Integer read FBaz write FBaz
>>>>> end;
>>>>>
>>>>> TChild = class(TParent) // Let's say CTRL+SHIFT+C for example
>>>>> public
>>>>> property Bar; //Foreword from CTRL+SHIFT+C for example
>>>>> published
>>>>> property Baz; // ...
>>>>> end;
>>>>
>>>> The above has no effect.
>>>> What do you want to achieve?
>>>
>>> That rather constantly doing copy paste of original properties and
>>> even methods to foreword to a new class, there will be a tool for
>>> that.
>>> With my Redis client, I have a basic class that contain such
>>> properties, and few classes that inherits them, and require to have
>>> the properties inside.
>>> It would be nice, but not a real demand to have such support.
>>>
>>> The CTRL+SHIFT+C is the tool for the job imho, because it completes
>>> code declarations, but as you discover, it does not do that at the
>>> time.
>>> I think that part of the interface inheritance feature that will or
>>> might be designed, it should support also this.
>>
>> I still don't see the point.
>> The properties have the same visibility, type, getters and setters.
>> I could understand the demand for a tool doing the opposite: to clean up
>> such duplicate properties.
>> Or a tool to raise the visibility of inherited properties.
>
> In my knowledge in Pascal, if the child does not pass the parent
> properties, then they are not visible in the child.
> For example in the RTTI you will not see the published property
> because it was not foreword to the child.
No, this is wrong. A class always inherits the properties of its parent.
The following example prints "42":
=== example begin ===
program test;
{$mode objfpc}
{$apptype console}
uses
typinfo;
type
{$TYPEINFO ON}
TTest = class
private
fFoo: LongInt;
published
property Foo: LongInt read fFoo write fFoo;
end;
{$TYPEINFO OFF}
TTestChild = class(TTest)
end;
var
t: TTestChild;
begin
t := TTestChild.Create;
t.Foo := 42;
Writeln(GetOrdProp(t, 'Foo'));
end.
=== example end ===
So your suggested tool is basically useless.
You only need to write "property Foo;" in a child class if you want to
increase the visibility of the property (e.g. from protected to public
or published)
Regards,
Sven
More information about the Lazarus
mailing list