Sealed classes - would you want them in D?

Piotr Mitana the.mail.of.mi2 at gmail.com
Thu May 10 13:22:20 UTC 2018


Hello,

I've recently thought of sealed classes (sealed as in Scala, not 
as in C#) and am thinking of writing a DIP for it. I decided to 
start this thread first though to gather some opinions on the 
topic.

For those who never coded Scala and don't know sealed classes: a 
sealed class is a class which can be only extended in the same 
source file.

     sealed class MyClass {}

Translating to D, a sealed class would could only be extended in 
the same module. Additionally I would suggest 
"sealed(some.package) MyClass {}" syntax for classes that could 
only be extended in the particular package.

In Scala an important value of sealed classes is that compiler 
knows that and can aid programmer in pattern matching by 
detecting the missed cases. However, there is another value I 
see: limiting the extension of classes.

Some time ago I was working on a simple CQRS library and created 
an Entity class, where I wanted only a few specific subtypes for 
it. The library is built over a few defined entity types and user 
is not able to create their own types (should extend the 
particular subtype instead). Sealing the Entity class could 
enable me to define the closed set of subtypes and prevent new 
direct subtype creation outside the library.

Combining sealed with final library developer can create a 
completely closed type hierarchy.

Any thoughts on that proposal?


More information about the Digitalmars-d mailing list