shared interfaces

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Feb 15 03:30:45 PST 2015


On Sunday, 15 February 2015 at 10:43:46 UTC, Andrey Derzhavin 
wrote:
> what is wrong in declarations, if I need to declare shared 
> classes D and C?

`shared` on a class/interface makes all members shared. And 
that's all it does.

So this:

----
interface IA
{
     void fnA();
}
shared class C : IA
{
     override void fnA() {}
}
----

is the same as this:

----

interface IA
{
     void fnA();
}
class C : IA
{
     override void fnA() shared {}
}
----

But you can't override a non-shared method with a shared one, 
hence the error.

So, if you need to override non-shared methods, you can't mark 
the whole class shared. Instead, you have to mark the shared 
members individually. Like so:

----
interface IA
{
     void fnA();
}
shared interface IC : IA
{
     void fnC();
}
class D : IC
{
     override void fnC() shared {}
     override void fnA() {}
}
----


More information about the Digitalmars-d-learn mailing list