- C++/CLI language features.
- .NET C++/CLI
- A first look at C++/CLI
- Writing Code in a Natural Way with C++/CLI - Good comparison of C++ CLI with Managed C++ and c#
- C++/CLI in Action: Declaring CLR types
- C++/CLI Properties - Syntactic sugar for accessor methods
- C++: The Most Powerful Language for .NET Framework Programming - I copied the following table from this link.
Description | C++/CLI | C# |
Allocate reference type | ReferenceType^ h = gcnew ReferenceType; | ReferenceType h = new ReferenceType(); |
Null reference | ReferenceType^ h = nullptr; | ReferenceType h = null; |
Allocate value type | ValueType v(3, 4); | ValueType v = new ValueType(3, 4); |
Reference type, stack semantics | ReferenceType h; | N/A |
Calling Dispose method | ReferenceType^ h = gcnew ReferenceType;
delete h; |
ReferenceType h = new ReferenceType();
((IDisposable)h).Dispose(); |
Implementing Dispose method | ~TypeName() {} | void IDisposable.Dispose() {} |
Implementing Finalize method | !TypeName() {} | ~TypeName() {} |
Boxing | int^ h = 123; | object h = 123; |
Unboxing | int^ hi = 123;
int c = *hi; |
object h = 123;
int i = (int) h; |
Reference type definition | ref class ReferenceType {};
ref struct ReferenceType {}; |
class ReferenceType {} |
Value type definition | value class ValueType {};
value struct ValueType {}; |
struct ValueType {} |
Using properties | h.Prop = 123;
int v = h.Prop; |
h.Prop = 123;
int v = h.Prop; |
Property definition | property String^ Name { String^ get() { return m_value; } void set(String^ value) { m_value = value; } } |
string Name { get { return m_name; } set { m_name = value; } } |
Exposing an event | TODO |
// expose the event event System::EventHandler^ OnEventOccurrance; //Fire the event if (OnEventOccurrance != nullptr) { OnEventOccurrance(this, gcnew System::EventArgs()); } |
Simple type methods, double example | double.IsNaN(someDouble); double.NaN; |
System::Double::IsNaN(someDouble) System::Double::NaN |