Improved options using the C# trait pattern and made the implementation private which disables casting.