Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Interfaces- only implement an interface in other interfaces

I would like to only implement certain interfaces within other interfaces, I don't want them to be able to be inherited directly by a class.

Thanks in advance!

like image 968
Andrew Camilleri 'Kukks' Avatar asked Feb 17 '10 18:02

Andrew Camilleri 'Kukks'


2 Answers

You can't do this in C# - any class can implement any interface it has access to.

Why would you want to do this? Bear in mind that by declaring an interface inheritance:

public interface InterfaceA {}
public interface InterfaceB : InterfaceA {}

You're specifying that anything implementing InterfaceB also has to implement InterfaceA, so you'll get classes implementing InterfaceA anyway.

like image 61
thecoop Avatar answered Nov 15 '22 13:11

thecoop


First of all, it doesn't make sense to say "implement within other interfaces" because interfaces can't implement anything.

I can see two flawed ways of doing this, sort of.

  1. Make Animated and NonAnimated abstract classes that implement IAnimation. The concrete class below them can still forcibly override your IAnimation methods with the new operator:

    class SomeAnim : Animated
    {
        public new void Foo() { }
    }
    
  2. Use mixins. Keep IAnimated and INonAnimated as interfaces, but don't put any methods in your interface. Instead define extension methods like this:

    static class Ext
    {
        public static void Foo(this IAnim anim)
        {
            if (anim is IAnimated) // do something
            else if (anim is INonAnimated) // do something else
        }
    }
    

again, a bit of a hack. But what you're trying to do indicates design flaws anyway.

like image 1
Tesserex Avatar answered Nov 15 '22 12:11

Tesserex