[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