How to implement an interface explicitly using a virtual method?

I can not do it

interface InterfaceA
{
    void MethodA();
}

class ClassA : InterfaceA
{
    virtual void InterfaceA.MethodA()
    // Error: The modifier 'virtual' is not valid for this item
    {
    }
}

If the following work is performed

class ClassA : InterfaceA
{
    public virtual void MethodA()
    {
    }
}

Why? How to get around this?

+5
source share
5 answers

I think this is due to the fact that when an element is explicitly implemented, it cannot be accessed through an instance of the class, but only through an instance of the interface.

- "" , , . , . .

, , csharptest.net ,

+8
+6

#:

, , , .

"" .

+3

- :

interface InterfaceA
{
    void MethodA();
}

class ClassA : InterfaceA
{
    void InterfaceA.MethodA()
    { MethodB(); }

    protected virtual void MethodB()
    { 
    }
}

, . :

interface IOrderDetails
{
    void PlaceOrder();
}

//Sometime later you extend with:
interface IOrderDetails2 : IOrderDetails
{
    void PlaceOrder(IUser user);
}

//Implementation
class Order : IOrderDetails, IOrderDetails2
{
    static readonly IUser AnonUser;

    void IOrderDetails.PlaceOrder()
    { OnPlaceOrder(AnonUser); }
    void IOrderDetails2.PlaceOrder(IUser user)
    { OnPlaceOrder(user); }

    protected virtual void OnPlaceOrder(IUser user)
    { 
    }
}

, IOrderDetails2, ( ). , , ...

+3

, , .

0

All Articles