Если некоторые из производных классов нуждаются в параметрах, а некоторые - нет, вам необходимо иметь две перегруженные версии метода. Тогда каждый производный класс может переопределить тот, который ему нужен.
class Foo {
protected abstract XmlDocument CreateRequestXML(int somevalue);
protected abstract XmlDocument CreateRequestXML();
};
class Bar : public Foo {
protected override XmlDocument CreateRequestXML(int somevalue) { ... };
protected override XmlDocument CreateRequestXML()
{ CreateRequestXML(defaultInt); }
};
Это, конечно, создает проблему, когда пользователь вызывает неправильный адрес. Если для дополнительного параметра не существует приемлемого значения по умолчанию, вам может потребоваться создать исключение в производном классе, если вызывается неправильная версия.