One solution would be to use Bridge pattern.
Software design pattern - Wikipedia, the free encyclopedia[
^]
Bridge pattern - Wikipedia, the free encyclopedia[
^]
Thus you create a bridge that would allow you to simulate a managed C# class deriving from an unmanaged C++ class. Of course, you cannot directly do that. But it is not hard to create a managed interface in C++/CLI that mimic your original interface and then have also a class that derive from your original interface and forward all calls to the managed interface.
As it required a few lines of code, I won't write it. If you know how to hold managed data inside a native class, then it should be relatively trivial to implement.
On the other hand, do you really need to implement a native C++ abstract class using managed C# class? In fact, mixing managed and native code does required some knowledge about interop.
By the way a book like this one might be very useful if you really want to write such code:
Manning | C++/CLI in Action[
^]
P.S. See also my comments under question and second solution.