I think I still would have to deal with a lot of OOP and imperative code there, C# feels like a kitchen sink of stuff - right?
Rust is imperative too, though.
Yes. You have two choices: Interface implemented once, or virtual on all your public members.
I personally think Interface is the sane choice.
Would be nice if the .NET devs let us mock POCO's though...