Сделайте это статичным.
Если вы вызываете не виртуальный метод, вы хотите узнать из своего кода, какой метод класса вы вызываете. Недостаток .net в том, что вы не можете узнать это из своего кода.
Пример
В Java, если вы определите ClassB как
public class ClassB extends ClassA {
@Override
public void run() {
}
}
и объект
ClassA obj=new ClassB();
Если вы вызовете obj.run (), как вы узнаете, соответствует ли этот код правилам полиморфного принципа открытия / закрытия или он будет кодировать метод, связанный с ClassA? В Java вы будете знать, что всегда есть полиморфизм. Проще делать макеты, проще расширять классы и следовать принципу подстановки Лискова.
С другой стороны, статические методы привязаны к классу, поэтому, если вы хотите вызвать метод, связанный с ClassA, вы можете определить этот метод следующим образом:
public static run(ClassA obj)
и вы можете позвонить с
ClassB obj=new ClassB();
ClassA.run(obj);
и из кода вы узнаете, что вызываемый вами метод определен в ClassA, а не в ClassB.