Как я понимаю, вы хотите, чтобы ваш абстрактный класс был реализован только другими классами в той же сборке (например, он является внутренним), но производные классы могут быть общедоступными.
Способ сделать это состоит в том, чтобы сделать абстрактный базовый класс общедоступным, но дать ему внутренний конструктор по умолчанию:
public abstract class MyClass
{
internal MyClass() { }
}
Это позволит MyClass (и, следовательно, его членам) быть видимым и доступным для классов вне вашей сборки, но классы вне вашей сборки не могут наследовать от него (получит ошибку компиляции).
Edit: Если классы, которые могут быть видимыми внешними сборками, наследуются от MyClass, вы не можете запретить MyClass также видеть visible - например, отображаться в Intellisense. Однако вы можете предотвратить их использование , следуя приведенным выше инструкциям.