В самом языке нет ничего, что облегчало бы это, но вы должны быть в состоянии сделать это, сделав свои конструкторы внутренними. Однако, если вы сделаете это, вы не сможете обновить его из внешних сборок, поэтому вам придется добавить заводской метод.
public class Foo
{
internal Foo()
{
}
public Foo Create()
{
return new Foo();
}
}
Вот альтернатива, которая позволяет вам обновлять класс во внешних сборках
public sealed class Foo : FooBase
{
}
public class FooBase
{
internal FooBase() { }
}
Однако один вопрос, который вы можете себе задать, это точно , почему вы хотите, чтобы класс был запечатан. Иногда это неизбежно, но я видел, как ключевое слово sealed
злоупотребляли так часто, что я думал, что подниму его. Часто разработчики заклеивают классы, потому что они чрезмерно защищены от своего кода. В большинстве случаев , если класс хорошо спроектирован, его не нужно запечатывать.