計算機科学のブログ

inheritance - Your object's family tree - subclass, method, virtual, override

Head First C Sharp: A Learner’s Guide to Real-World Programming with C Sharp and .NET (Andrew Stellman(著)、Jennifer Greene(著)、O’Reilly Media)の Chapter 6(inheritance - Your object’s family tree)、p.293(Exercise)の解答を求めてみる。

コード

Program.cs

class A
{
    public int ivar = 7;
    public virtual string m1() { return "A's m1, "; }
    public string m2() { return "A's m2, "; }
    public virtual string m3() { return "A's m3, "; }
}
class B : A
{
    public override string m1()
    {
        return "B's m1, ";
    }
}
class C : B
{
    public override string m3()
    {
        return $"C's m3, {ivar + 6}";
    }
}
class Mixed5
{
    public static void Main(string[] args)
    {
        A a = new A();
        B b = new B();
        C c = new C();
        A a2 = new C();

        string q = b.m1() + c.m2() + a.m3();

        Console.WriteLine(q == "B's m1, A's m2, A's m3, ");

        q = c.m1() + c.m2() + c.m3();
        Console.WriteLine(q == "B's m1, A's m2, C's m3, 13");

        q = a.m1() + b.m2() + c.m3();
        Console.WriteLine(q == "A's m1, A's m2, C's m3, 13");

        q = a2.m1() + a2.m2() + a2.m3();
        Console.WriteLine(q == "B's m1, A's m2, C's m3, 13");
    }
}

入出力結果(Terminal, Zsh)

% dotnet run
True
True
True
True
%