You may also want to look at the mechanisms in the compiler for `member`, `virtual` and `constructor` see <https://nim-lang.github.io/Nim/manual_experimental.html#virtual-pragma>
They should translate pretty well to C#, especially `member` and `virtual`. Interfacing with generics can be more painful but C++ paved the way <https://nim-lang.org/docs/manual.html#importcpp-pragma-importcpp-for-procs> For other things you can go pretty far without modifying the compiler with macros and the `emit` pragma <https://nim-lang.org/docs/manual.html#implementation-specific-pragmas-emit-pragma>