Ключевое слово для доступа к объемлющему классу из вложенного
От: x-code  
Дата: 07.11.23 13:18
Оценка:
http://rsdn.org/poll/8946
Автор: x-code
Дата: 07.11.23
Вопрос: В Java, D и некоторых других языках нестатический вложенный класс имеет доступ к полям экземпляра объемлющего класса. Экземпляры таких вложенных классов создаются с использованием экземпдяров объемлющих классов. При этом явного ключевого слова (по аналогии с this или self для доступа к объекту класса из нестатического метода класса) для этого не предусмотрено. Якобы на каком-то низком уровне в Java это называется this$0, но это же полная фигня. Как бы вы назвали такое ключевое слово?
Re: Ключевое слово для доступа к объемлющему классу из вложенного
От: Khimik  
Дата: 07.11.23 14:16
Оценка:
Здравствуйте, x-code, Вы писали:

XC>http://rsdn.org/poll/8946
Автор: x-code
Дата: 07.11.23
Вопрос: В Java, D и некоторых других языках нестатический вложенный класс имеет доступ к полям экземпляра объемлющего класса. Экземпляры таких вложенных классов создаются с использованием экземпдяров объемлющих классов. При этом явного ключевого слова (по аналогии с this или self для доступа к объекту класса из нестатического метода класса) для этого не предусмотрено. Якобы на каком-то низком уровне в Java это называется this$0, но это же полная фигня. Как бы вы назвали такое ключевое слово?


Я не очень понял вопрос, т.к. не владею java. Но у меня вопрос по теме: в Delphi нельзя никак назвать объект/сущность, к которой обращаются через with? Т.е. аналогично self в функции класса, чтобы было например this.free ?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re: Ключевое слово для доступа к объемлющему классу из вложенного
От: · Великобритания  
Дата: 08.11.23 10:21
Оценка:
Здравствуйте, x-code, Вы писали:

XC>http://rsdn.org/poll/8946
Автор: x-code
Дата: 07.11.23
Вопрос: В Java, D и некоторых других языках нестатический вложенный класс имеет доступ к полям экземпляра объемлющего класса. Экземпляры таких вложенных классов создаются с использованием экземпдяров объемлющих классов. При этом явного ключевого слова (по аналогии с this или self для доступа к объекту класса из нестатического метода класса) для этого не предусмотрено. Якобы на каком-то низком уровне в Java это называется this$0, но это же полная фигня. Как бы вы назвали такое ключевое слово?

А зачем специальное слово? Чем подход Явы с this не устраивает?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Ключевое слово для доступа к объемлющему классу из вложе
От: vsb Казахстан  
Дата: 08.11.23 10:26
Оценка: +2
В Java используется синтаксис OuterClass.this.

В общем случае вложенность может быть произвольного уровня, поэтому альтернатив тому, как в Java сделано, я не вижу. В целом это редкий синтаксис (он нужен только если происходит затемнение идентификатора), поэтому выделять для него отдельное ключевое слово — тоже не слишком-то правильно. В общем это один из тех случаев, где в Java сделано нормально (если вообще считать, что эта концепция вложенных классов со ссылкой на внешний — нужна, в чём я, лично, сомневаюсь).
Отредактировано 08.11.2023 10:29 vsb . Предыдущая версия . Еще …
Отредактировано 08.11.2023 10:27 vsb . Предыдущая версия .
Re: Ключевое слово для доступа к объемлющему классу из вложе
От: graniar  
Дата: 08.11.23 23:11
Оценка:
Я на C делаю так:


#define GetAggregateByMember(Aggregate,MemberName,MemberLink) \
    ((Aggregate*)(((size_t)(MemberLink))-((size_t)&((Aggregate*)(size_t)0)->MemberName)))


например:


struct B{
    int side;
    B* peer;
};

struct A{
    B b[2];
    A(){
        b[0].side=0;
        b[1].side=1;
    }
};

B* pb;
//...

A* a1 = GetAggregateByMember(A,b[pb->side],pb);
Отредактировано 08.11.2023 23:12 graniar . Предыдущая версия .
Re[2]: Ключевое слово для доступа к объемлющему классу из вложенного
От: Jack128  
Дата: 09.11.23 08:18
Оценка: -1
Здравствуйте, Khimik, Вы писали:

K>Здравствуйте, x-code, Вы писали:


XC>>http://rsdn.org/poll/8946
Автор: x-code
Дата: 07.11.23
Вопрос: В Java, D и некоторых других языках нестатический вложенный класс имеет доступ к полям экземпляра объемлющего класса. Экземпляры таких вложенных классов создаются с использованием экземпдяров объемлющих классов. При этом явного ключевого слова (по аналогии с this или self для доступа к объекту класса из нестатического метода класса) для этого не предусмотрено. Якобы на каком-то низком уровне в Java это называется this$0, но это же полная фигня. Как бы вы назвали такое ключевое слово?


K>Я не очень понял вопрос, т.к. не владею java. Но у меня вопрос по теме: в Delphi нельзя никак назвать объект/сущность, к которой обращаются через with? Т.е. аналогично self в функции класса, чтобы было например this.free ?


Можно
var this := Сущность;
with this do
begin
  this.Free;
end;
Re[3]: Ключевое слово для доступа к объемлющему классу из вложенного
От: rudzuk  
Дата: 09.11.23 13:30
Оценка:
Здравствуйте, Jack128, Вы писали:

J> Можно

J>
J> var this := Сущность;
J> with this do
J> begin
J>   this.Free;
J> end;
J>


Можно хелпер написать
avalon/3.0.2
Re[4]: Ключевое слово для доступа к объемлющему классу из вложенного
От: Jack128  
Дата: 10.11.23 10:18
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Здравствуйте, Jack128, Вы писали:


J>> Можно

J>>
J>> var this := Сущность;
J>> with this do
J>> begin
J>>   this.Free;
J>> end;
J>>


R>Можно хелпер написать


Для каждого типа — свой отдельный? Сомнительная идея.
Re[5]: Ключевое слово для доступа к объемлющему классу из вложенного
От: rudzuk  
Дата: 10.11.23 13:30
Оценка:
Здравствуйте, Jack128, Вы писали:

J> R>Можно хелпер написать


J> Для каждого типа — свой отдельный? Сомнительная идея.


Достаточно к базовому классу. Для записей, да, к каждому типу.
avalon/3.0.2
Re[6]: Ключевое слово для доступа к объемлющему классу из вложенного
От: Jack128  
Дата: 10.11.23 14:56
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Здравствуйте, Jack128, Вы писали:


J>> R>Можно хелпер написать


J>> Для каждого типа — свой отдельный? Сомнительная идея.


R>Достаточно к базовому классу. Для записей, да, к каждому типу.


К TObject ?? Ну тогда кроме .Free и .ClassName ничего вызвать нельзя будет. В чем тогда смысл ??
Re[7]: Ключевое слово для доступа к объемлющему классу из вложенного
От: rudzuk  
Дата: 10.11.23 17:39
Оценка:
Здравствуйте, Jack128, Вы писали:

J> R>Достаточно к базовому классу. Для записей, да, к каждому типу.


J> К TObject ?? Ну тогда кроме .Free и .ClassName ничего вызвать нельзя будет.


Приведение.

J> В чем тогда смысл ??


Смысл в том, чтобы получить this
avalon/3.0.2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.