4

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.

4
  • 2
    Is this for some real project or is it an academic question? If it is for a concrete project please provide more details. Commented Oct 3, 2010 at 8:28
  • @Darin Dimitrov, no It is not for concreate project. Commented Oct 3, 2010 at 8:33
  • 5
    artima.com/designtechniques/compoinhP.html Composition versus Inheritance, by Bill Venners. Commented Oct 3, 2010 at 8:35
  • 4
    There are two main uses for multiple implementation inheritance. (1) expressing complex "is a kind of" relationships in a world where hierarchies do not cleanly partition everything into one category. Like a Submarine is both a Watercraft and a MilitaryVehicle. (2) Re-using implementation detail functionality from multiple sources. Which of the two, if either, are you primarily interested in? Is there some third aspect of multiple inheritance that you are particularly keen on? Commented Oct 4, 2010 at 15:35

5 Answers 5

5

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

Sign up to request clarification or add additional context in comments.

Comments

3

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).

1 Comment

+1 This is the way to do multiple inheritance without interfaces
1

ECMA-334, § 8.9 Interfaces
...
Interfaces can employ multiple inheritance.

So for as far C# (limited) support of 'multiple inheritance' goes, interfaces are the official way.

2 Comments

You don't really answer OPs question "How can I simulate multiple inheritance in C# without using interfaces?"
@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.
1

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

Comments

0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.