On Friday, 20 January 2023 at 11:28:23 UTC, thebluepandabear wrote:
Hi,

In Java/C# you can create purely static classes.

These are classes whose methods are all static, the classes cannot be derived from or instantiated:

```
static class Algo {
    void drawLine(Canvas c, Pos from, Pos to) { ...... };
}
```

Class in use:

```
Algo.drawLine(new Canvas(), new Pos(5, 3), new Pos(7, 9));
```

This type of semantics is not possible in D, which sucks.

After scouring the forums, the only workaround seems to be the following:

```
final abstract class Algo {
    void drawLine(Canvas c, Pos from, Pos to) { ...... };
}
```

This solution seems like a bit of a hack, which is why I don't like it.

Alternatively you could create a module, but then it would just be a function without a clear type.

Is anyone aware of a non-ugly way to implement a 'static' class or namespace?

Regards,
thebluepandabear

There is no way to implement that functionality in D. `final` means that the class cannot be extended, and `abstract` requires that only an extension of said class can be instantiated. However, unlike in Java and C#, you cannot call a function without instantiating said class, as functions act on the class object.

Reply via email to