views:

178

answers:

5

How can I simulate multiple inheritance in C# without using interfaces. I do believe, interfaces abilityes are not intended for this task. I'm looking for more 'design pattern' oriented way.

+3  A: 
Henk Holterman
You don't really answer OPs question "How can I simulate multiple inheritance in C# without using interfaces?"
Kirk Broadhurst
@Kirk: No, I don't. I reacted to the _I do believe, interfaces abilityes are not intended for this task_ statement on which the question was based.
Henk Holterman
+1  A: 

Although not quite multiple inheritance, you can get "sort of mixin functionality" by combining interfaces with extension methods.

Marcus Riemer
+1  A: 

Multiple inheritance in a form of a class is not possible, but they may be implemented in multi-level inheritance like:

public class Base {}

public class SomeInheritance : Base {}

public class SomeMoreInheritance : SomeInheritance {}

public class Inheriting3 : SomeModeInheritance {}

As you can see the last class inherits functionality of all three classes:

  • Base,
  • SomeInheritance and
  • SomeMoreInheritance

But this is just inheritance and doing it this way is not good design and just a workaround. Interfaces are of course the preferred way of multiple inherited implementation declaration (not inheritance, since there's no functionality).

Robert Koritnik
+1 This is the way to do multiple inheritance without interfaces
Kirk Broadhurst
A: 

As C# only supports single inheritance, I believe you'll need to add more classes.

Are there specific reasons for not using interfaces? It's not clear from your description why interfaces are not suitable.

Waleed Eissa
+3  A: 

Like Marcus said using interface + extension methods to make something like mixins is probably your best bet currently.

also see: Create Mixins with Interfaces and Extension Methods by Bill Wagner Example:

using System;

public interface ISwimmer{
}

public interface IMammal{
}

class Dolphin: ISwimmer, IMammal{
        public static void Main(){
        test();
                }
            public static void test(){
            var Cassie = new Dolphin();
                Cassie.swim();
            Cassie.giveLiveBirth();
                }
}

public static class Swimmer{
            public static void swim(this ISwimmer a){
            Console.WriteLine("splashy,splashy");
                }
}

public static class Mammal{
            public static void giveLiveBirth(this IMammal a){

        Console.WriteLine("Not an easy Job");
            }

}

prints splasshy,splashy Not an easy Job

Roman A. Taycher