【发布时间】:2021-02-27 00:31:53
【问题描述】:
我有一个公共抽象类,我希望模块中的其他类可以扩展,但我不想在外部进行扩展。 我知道我可以将其密封,但它有许多子类,将它们全部放在同一个文件中会很麻烦。如何实现?
【问题讨论】:
-
这就是使用
sealed类的地方!
我有一个公共抽象类,我希望模块中的其他类可以扩展,但我不想在外部进行扩展。 我知道我可以将其密封,但它有许多子类,将它们全部放在同一个文件中会很麻烦。如何实现?
【问题讨论】:
sealed 类的地方!
您可以将其构造函数定义为internal。子类必须调用超类的构造函数,因此只有可以看到该构造函数的文件才能对您的类进行子类化。
【讨论】:
您可以将其设为sealed,但在同一文件中仅声明一个internal(而不是sealed)子类。然后模块中的其他类可以看到并扩展内部子类,因此您的原始类。
编辑:缺点是扩展类也必须是internal(甚至更不可见)。 Louis Wasserman 的解决方案避免了这种情况,而且更简单。
【讨论】: