以前のリビジョンの文書です
a==bの評価
1-2,a,bが共にdelegate^の場合
delegateの中身の関数の比較が行われる。
1-3,aがString^かdelegate^でbがそれ以外のハンドルの場合
ハンドルの比較が行われる。
1-4,a,bが共にString^でもdelegate^でもない場合
ハンドルの比較が行われる。
2,aがハンドルでbがハンドル以外の場合
2-1,aがString^でbが文字列リテラルの場合
文字列リテラルがString^になり、文字列の比較が行われる。
2-2,aがObject^以外ででbが基本型(value type含む)またはポインターの場合
コンパイルエラーになる。
2-3,aがObject^でbが基本型(value type含む)の場合
bがボックス化され、ハンドルの比較が行われる。
2-4,aがObject^でbがポインターの場合
コンパイルエラーになる。
C++と同じように行われる。
using namespace System; ref class C { int i; }; delegate void mydelegate(); void func() { return; } int main(array<System::String ^> ^args) { String^ a = "aaa"; String^ b = "aaa"; Object^ o = "aaa"; C^ c = gcnew C; mydelegate^ d1 = gcnew mydelegate(func); mydelegate^ d2 = gcnew mydelegate(func); if ( a == b ) // true Console::WriteLine(L"Hello World"); if ( d1 == d2 ) // true Console::WriteLine(L"Hello World"); if ( a == o ) // false Console::WriteLine(L"Hello World"); if ( a == "aaa" ) // true Console::WriteLine(L"Hello World"); if ( a == L"aaa" ) // true Console::WriteLine(L"Hello World"); char* p1 = "aaa"; int i=0; // if ( a == p1 ) // compile error // if ( o == p1 ) // compile error // if ( a == 0 ) // compile error // if ( c == 0 ) // compile error if ( o == 0 ) // false Console::WriteLine(L"Hello World"); if ( o == i ) // false Console::WriteLine(L"Hello World"); Object^ oi = 0; if ( oi == 0 ) // false Console::WriteLine(L"Hello World"); // if ( o == p1 ) // compile error if ( "aaa" == "aaa" ) // same as c++, undefined. Console::WriteLine(L"Hello World"); return 0; }