Проверьте, что последняя редакция кода класса LibClasses._1 в модуле LibCode имеет вид.
namespace LibClasses.
{.
public class _1.
{.
string s="a string" ;
public override bool Equals (object obj).
{.
return obj≠null && GetType ()==obj.GetType () && s == ((_1)obj).s;
}.
public _1(string s).
{.
this.s = s;
}.
public _1().
{.
}.
public void Method ().
{.
System.Console.WriteLine (s);
}.
}.
}.
Вернемся вновь к редакции класса _2 в модуле CodeFile2 сборки MainExe.
Пусть новая редакция кода класса _2 имеет вид.
class _2.
{.
static LibClasses._1 inst1 = new LibClasses._1();
static void Main (string[] args).
{.
LibClasses._1 inst_1a = new LibClasses._1();
System.Console.WriteLine (inst1.Equals (inst_1a));
System.Console.WriteLine (inst_1a==inst1);
System.Console.ReadLine ();
}.
}.
Здесь важна новая строка кода.
System.Console.WriteLine (inst_1a==inst1);
Оператор inst_1a==inst1 вернет false, так как сравнению подвергаются ссылки. Новый метод Equals при сравнении тех же объектов возвращает true. На лицо явное несоответствие — оператор равенства возвращает результат, отличный от метода Equals! То же несоответствие возникает и в отношении оператора неравенства inst_1a≠inst1 (проверьте).
Язык C# позволяет перегружать некоторые стандартные операторы, в частности операторы сравнения == и ≠.
Вернемся к коду класса LibClasses._1 в модуле LibCode и добавим к нему описания перегруженных операторов == и ≠, характерные для класса LibClasses._1 и его наследников.
public static bool operator ==(_1 obj1, _1 obj2).
{.
return Equals (obj1,obj2);
}.
public static bool operator ≠(_1 obj1, _1 obj2).
{.
return !Equals (obj1,obj2);
}.
Любое описание операторов должно содержать модификаторы public static и использовать служебное слово operator. Проверьте работу новой версии кода.