Implement an interface consuming and returning the same interface in C#

Advertisements

I am having trouble implementing an interface with C#:

    public interface IFooable
    {
        public (IFooable left, IFooable right) FooWith(IFooable other);
    }

And then in my concrete class, I have

class Concrete
{
        public (Concrete left, Concrete right) FooWith(Concrete other)
        {
            return GoFooSomewhereElse(...);
        }
}

But in my tests, the compiler tells me that Concrete does not implement the FooWith function.

I don’t really understand what is going on, since I am so new at C# and easily confused by the language!

I found similar questions (eg Why can't I override my interface methods?) but they did not solve my problem.

>Solution :

Try this trick with generic:

public interface IFooable<T>
{
    public (T left, T right) FooWith(T other);
}

class Concrete : IFooable<Concrete>
{
    public (Concrete left, Concrete right) FooWith(Concrete other)
    {
        return GoFooSomewhereElse(...);
    }
}

Leave a ReplyCancel reply