Thread overview
Bypass the protection level
Mar 11, 2015
Namespace
Mar 11, 2015
Namespace
Mar 11, 2015
Ali Çehreli
Mar 11, 2015
Namespace
March 11, 2015
Let's say we have these files:

----
module Foo.Graphic.Drawable;

interface Drawable {
	void draw(bool);
}
----

----
module Foo.Graphic.Sprite;

import Foo.Graphic.Drawable;

class Sprite : Drawable {
protected:
	void draw(bool enable) {
		import core.stdc.stdio : printf;

		if (enable)
			printf("draw\n");
		else
			printf("no drawing...\n");
	}
}
----

----
module Foo.Window.Window;

import Foo.Graphic.Drawable;

class Window {
	void draw(Drawable d) {
		d.draw(true);
	}
}
----

I can call draw on Drawable, because it is declared public and I cannot call draw on Sprite because it is declared protected (this is already a bit weird, why can I redeclare the interface method draw as protected?) but I can call the protected draw method from Sprite through Drawable. Is this intended?
March 11, 2015
Could it be that this is intentional and has always worked?
March 11, 2015
On 03/11/2015 04:40 AM, Namespace wrote:

> I can call draw on Drawable, because it is declared public and I cannot
> call draw on Sprite because it is declared protected (this is already a
> bit weird, why can I redeclare the interface method draw as protected?)

It is the same in C++.

> but I can call the protected draw method from Sprite through Drawable.
> Is this intended?

As far as I know, yes it's intended and again the same in C++.

Ali

March 11, 2015
On Wednesday, 11 March 2015 at 15:22:43 UTC, Ali Çehreli wrote:
> On 03/11/2015 04:40 AM, Namespace wrote:
>
> > I can call draw on Drawable, because it is declared public
> and I cannot
> > call draw on Sprite because it is declared protected (this is
> already a
> > bit weird, why can I redeclare the interface method draw as
> protected?)
>
> It is the same in C++.
>
> > but I can call the protected draw method from Sprite through
> Drawable.
> > Is this intended?
>
> As far as I know, yes it's intended and again the same in C++.
>
> Ali

o.O nice to know. Thank you.