How to access the first base class in C#?

I'm having a base class defined in my app

Something like,

using System;

public class BaseClass
    {
       public virtual void Method2() {Console.WriteLine("base2");}
       public virtual void Method1() {Console.WriteLine("base1");}
    }
public class Derived1 : BaseClass
    {
       public override void Method2() {Console.WriteLine("derived1-2");}
       public override void Method1() {Console.WriteLine("derived1-1");}
    }
    public class Derived2 : Derived1
    {
       public override void Method1() {Console.WriteLine("derived2-2");}


    }
public class Program
{
    public static void Main()
    {
        var obj = new Derived2();
        ((BaseClass)obj).Method2();
        Console.WriteLine("Hello World");
    }
}

Say I need to access the Method2() of my very first BaseClass. Even after typecasting it to ((BaseClass)obj).Method2(), I'm still getting derived1-2 while I'm expecting base2'.

How do I do that ?

Upvotes: 2

Views: 154

Answers (1)

Paul Michaels
Paul Michaels

Reputation: 16705

I completely agree with the comments: it sounds like the behaviour that you require would need you to re-think your classes - possibly inheritance is not the best solution in this case. It depends what you're trying to do; you could obviously just do this:

var obj = new BaseClass();
((BaseClass)obj).Method2();
Console.WriteLine("Hello World");

My guess would be that what you actually want here is some form of injection; for example:

public class BaseClass
{
    private readonly IFunctionality1 functionality1;

    public virtual void Method2() { Console.WriteLine("base2"); }
    public virtual void Method1() { this.functionality1.Method1(); }

    public BaseClass(IFunctionality1 functionality1)
    {
        this.functionality1 = functionality1;
    }
}
public class Derived1 : BaseClass
{
    public Derived1(IFunctionality1 functionality1) : base (functionality1)
    {

    }

}

In this case, you might find that inheritance isn't even required anymore.

Upvotes: 1

Related Questions