abstract override / abstract new

0

natrafiłem se przy krudzeniu na pewną rzecz i nie jestem do końca pewien jaki jest sens abstract override czy abstract new, trochę specyficzne połączenie.

ktoś mógłby mi rozjaśnić?

public class A
{
    public override string ToString()
    {
        return "A";
    }
}

public abstract class B : A
{
    public abstract override string ToString();
}

public abstract class C : A
{
    public abstract new string ToString();
}

public class D : B
{
    public override string ToString()
    {
        return "D";
    }
}

public class E : C
{
    public override string ToString()
    {
        return "E";
    }
}
var D = new D();
Console.WriteLine(D.ToString());

var E = new E();
Console.WriteLine(E.ToString());

=>

D
E

var D = new D();
Console.WriteLine(D);

var E = new E();
Console.WriteLine(E);

=>

D
A

4

Strange but legal

bonusowe punkty za to, że o podobny problem chodzi.

Chodzi o to, aby wymusić aby childy nadpisywały metodę z parenta, którą parent też dziedziczy od swojego parenta (którym też może być object).

public class A
{
	public override string ToString()
	{
		return "A";
	}
}

public abstract class B : A
{
}

public class C : B
{
	// nie musi nadpisywac ToString()
} 

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