Accessing this of containing class
Jonathan M Davis
jmdavisProg at gmx.com
Thu Feb 3 10:53:22 PST 2011
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
> >
> > <jmdavisProg at 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
More information about the Digitalmars-d-learn
mailing list