Да, это абсолютно нормально.Тот факт, что конструктор может вызываться только производными классами, не означает, что он не будет полезен.Например, у вас может быть абстрактный класс, который представляет именованную сущность какого-либо вида - имеет смысл принять имя в качестве параметра конструктора.
Возможно, стоило бы сделать конструктор защищенным, чтобы сделать егоеще более очевидно, что вы не можете просто вызвать его из другого места.
Обратите внимание, что в абстрактном классе есть конструктор (или несколько конструкторов) заставляет заставлять конструкторы производного класса проходить через него, но не заставляет производные классы иметь одинаковые сигнатуры конструктора.Например:
public abstract class NamedFoo
{
private readonly string name;
public string Name { get { return name; } }
protected NamedFoo(string name)
{
this.name = name;
}
}
public class DerivedFooWithConstantName
{
public DerivedFooWithConstantName() : base("constant name")
{
}
}
В этом случае конструктор производного класса «удаляет» параметр (предоставляя постоянное значение в качестве аргумента конструктору абстрактного класса), но в других случаях он может «добавлять» параметрычто это требуется, или есть смесь.