On Thursday, February 03, 2011 10:36:29 Ary Manzana wrote: > On 2/3/11 10:29 AM, Steven Schveighoffer wrote: > > On Thu, 03 Feb 2011 03:43:43 -0500, Jonathan M Davis > > > > <jmdavisp...@gmx.com> wrote: > >> On Thursday 03 February 2011 00:38:08 Jacob Carlborg wrote: > >>> On 2011-02-03 07:21, Jonathan M Davis wrote: > >>> > On Wednesday 02 February 2011 21:26:00 Mandeep Singh Brar wrote: > >>> >> Hi, > >>> >> > >>> >> Is there a method to access this reference of the container class > >>> >> from an inner class. i.e. > >>> >> class A { > >>> >> class B { > >>> >> > >>> >> methodM() { > >>> >> > >>> >> callAnotherM(A::this or A.this); > >>> >> > >>> >> } > >>> >> > >>> >> } > >>> >> } > >>> > > >>> > The outer class is referenced via the property outer. However, if the > >>> > inner class is static, then it has no such property and is not tied > >>> > >>> to a > >>> > >>> > specific instance of the outer class. In such a case, it can access > >>> > >>> the > >>> > >>> > private members of an instance of the outer class, but it's not > >>> > >>> tied to > >>> > >>> > an particular instance. Non-static inner classes (like yours above), > >>> > however, _are_ tied to a particular instance of the outer class, and > >>> > they have the outer property which is the this of the outer class. > >>> > > >>> > - Jonathan M Davis > >>> > >>> Just to add a note, you have to access the property via "this": > >>> > >>> this.outer > >> > >> That, I did not know. But I've never actually used an inner class in D > >> thus far. > >> I just read what TDPL says on it, and obviously I missed that point. > >> Thanks. > > > > I have noticed that, is that a bug? I always thought it strange, since > > outer is a keyword, that you need to do this.outer. > > > > -Steve > > I don't think outer is a keyword.
It's not a keyword. It's a property of non-static inner classes. It's like length on an array. It's always there, but it's not a keyword. - Jonathan M Davis