VisualStudio2005 の C# で "==" を定義したクラスを作ったんですが、それをジェネリッククラス内で使おうとしたら呼び出されませんでした。
裸で使えば問題なく動作するんですが、ジェネリック変数同士では Object.operator== が呼び出されているように思えます。
サンプルコード
class Program
{
static void Main( string[] args )
{
SampleData data0 = new SampleData();
SampleData data1 = new SampleData();
bool ret_operator = ( data0 == data1 );
GenericData<SampleData> gen_data = new GenericData<SampleData>();
gen_data.data1 = new SampleData();
gen_data.data2 = new SampleData();
gen_data.OperatorEq();
}
}
class GenericData<TYPE> where TYPE : class
{
public TYPE data1 = null;
public TYPE data2 = null;
public void OperatorEq()
{
Console.WriteLine( "GenericData.OperatorEq Start" );
bool ret_operator = ( data1 == data2 );
Console.WriteLine( "GenericData.OperatorEq End" );
}
}
class SampleData
{
public static bool operator ==( SampleData lhs, SampleData rhs )
{
Console.WriteLine( "SampleData.operator==" );
return true;
}
public static bool operator !=( SampleData lhs, SampleData rhs )
{
Console.WriteLine( "SampleData.operator!=" );
return !( lhs == rhs );
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public override bool Equals( object obj )
{
return base.Equals( obj );
}
}
結果
SampleData.operator==
GenericData.OperatorEq Start
GenericData.OperatorEq End