下記のコードのClassBaseのmethod()メソッドをstaticメソッドにしたいと考えています。もちろん、TestクラスのMain()メソッドの中もstaticメソッド呼び出しに変更しているとします。その場合、method()メソッド中のsub_method()メソッドもstaticメソッドにしなければなりませんが、sub_method()メソッドはabstractですので、エラーとなります。print()メソッドはまとめつつ、クラスに特化した部分のみ切り出す方法は他にありますでしょうか。

using System;

public abstract class ClassBase
{
    public void method()
    {
        sub_method();
    }

    public abstract void sub_method();

    protected void print(string s) {
        System.Console.WriteLine("<<" + s + ">>");
    }
}

public class ClassA : ClassBase
{
    public override void sub_method() {
        print("ClassA");
    }
}

public class ClassB : ClassBase
{
    public override void sub_method() {
        print("ClassB");
    }
}

public class Test
{
    public static void Main()
    {
        (new ClassA()).method();

        (new ClassB()).method();
    }
}