C# override metod - pomoc

0

Witam,

Mam dwie klasy A oraz B (przykładowa nazwa). Klasa B dziedziczy po klasie A.
W klasie B robię override metody Init z klasy A jednak różnica jest tylko w tym jaką wartość oraz typ będzie zawierać zmienna "variable" .
Chcę jednak uniknąć duplikowania kodu i użyć odwołania do base ale nie bardzo mam pomysł jak to zrobić.

public class A
{
    public virtual void Init()
    {
        Method1();

        var variable = String.Equals("test", "test2");

        if (variable)
        {
            Method3();
        }
        Method2();
    }

    protected void Method1()
    {
        
    }

    protected void Method2()
    {
        
    }

    protected void Method3()
    {
        
    }
}



public class B : A
{
    public override void Init()
    {
        Method1();

        var variable = 4;

       if ((variable % 2) == 0)
        {
            Method3();
        }
        Method2();
    }
}


0

Różni się też warunkiem.
Robisz metodę generyczna, czyli typ w < >. Zmienna jako parametr metody, a drugi parametr to delegat będący warunkiem. Taka mała podpowiedź. Może napiszę kod jak będę później przy komputerze.

0

Na pierwszy rzut oka wcale nie potrzebujesz, żeby Twoje Init było wirtualne. Taki design widziałbym bardziej z abstract class i ten warunek z if'a jako abstract member.

using System;

public abstract class C
{
     protected abstract Func<bool> Condition {get;}
	
    public void Init()
    {
        Method1();

        if (Condition())
        {
            Method3();
        }
        Method2();
    }
		
   protected void Method1() {}
   protected void Method2() {}
   protected void Method3() {}  
}

public class A : C
{
	protected override Func<bool> Condition => () =>
	{
		var variable = String.Equals("test", "test2");
		return variable;
	};
}

public class B : C
{
	protected override Func<bool> Condition => () =>
	{
        var variable = 4;
        return variable % 2 == 0;
	};
}

Chociaż to takie gdybanie, średnio lubię patrzeć na kod w którym brakuje kontekstu. Zawsze tu może się kryć jakieś XY.

0

Tak poza tematem, to czy wystawianie publicznej metody Init to na pewno dobry pomysł? Wygląda na temporal coupling. Nie da się tego wrzucić do konstruktora?

1 użytkowników online, w tym zalogowanych: 0, gości: 1