Been using C# for about five years and only now did it strike me about the class visibility of custom exceptions. It's perfectly legal to write internal or even private nested exceptions like so:

```
internal class WhyDoThis : Exception { }

public class Foo { private class WhyWhyWhy : Exception { } }

```

So when you go about throwing these exceptions in your DLLs, only the (minority of) people doing decent (non pokemon) exception handling get their apps crashed.

So my question is, what's the purpose of such a pattern? Or why is this even legal?