The C# language is derived from C and C++, and it was created for the enterprise developer who is willing to sacrifice a bit of C++'s raw power for more convenience and productivity. C# is modern, simple, object-oriented, and type-safe. It borrows a lot from C and C++, but it is considerably different in specific areas such as namespaces, classes, methods, and exception handling.
C# provides you with convenient features such as garbage collection, type safety, versioning, and more. The only "expense" is that by default your code operates in safe mode, where no pointers are allowed. Type safety pays off. However, if you need pointers, you can still use them via unsafe code--and no marshaling is involved when calling the unsafe code.