shared interfaces

Andrey Derzhavin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Feb 15 04:34:49 PST 2015


On Sunday, 15 February 2015 at 11:30:46 UTC, anonymous wrote:
> 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() {}
> }
> ----
Try to compile your example, it is wrong.


More information about the Digitalmars-d-learn mailing list