C # рдЕрд╕рдВрдЧрдд рддреБрд▓рдирд╛


рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ:
рдпрд╣ рдкреВрд░реНрд╡ рд╕реА # рдбреЗрд╡рд▓рдкрд░ рдПрд░рд┐рдХ рд▓рд┐рдкрд░реНрдЯ рдХреЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХрд╛ рдПрдХ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж рд╣реИред рд░рд┐рдХреЙрд░реНрдб рдПрдХ "рдкреНрд░рд╢реНрди рдФрд░ рдЙрддреНрддрд░" рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ, рдореИрдВ рдкреНрд░рд╢реНрди рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдФрд░ рдЙрддреНрддрд░ рдкрд░ рдЬрд╛рдКрдВрдЧрд╛, рдЖрдк рдореВрд▓ рдореЗрдВ рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реВрдВрдЧрд╛, рдФрд░ Google рдФрд░ рд╕рдВрдХрд▓рди рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ рдХрд┐ рддреБрд▓рдирд╛ рдХреЗ 9 рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрддреНрддрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ (рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП):
int myInt = 1; short myShort = 1; object objInt1 = myInt; object objInt2 = myInt; object objShort = myShort; Console.WriteLine(myInt == myShort); // scenario 1 Console.WriteLine(myShort == myInt); // scenario 2 Console.WriteLine(myInt.Equals(myShort)); // scenario 3 Console.WriteLine(myShort.Equals(myInt)); // scenario 4 Console.WriteLine(objInt1 == objInt1); // scenario 5 Console.WriteLine(objInt1 == objShort); // scenario 6 Console.WriteLine(objInt1 == objInt2); // scenario 7 Console.WriteLine(Equals(objInt1, objInt2)); // scenario 8 Console.WriteLine(Equals(objInt1, objShort)); // scenario 9 



рд╕реА # рднрд╛рд╖рд╛ рдХреЛ рдбреЗрд╡рд▓рдкрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдЕрд░реНрдерд╛рддреН, рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдЬрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рддрдХрдиреАрдХ рдФрд░ рд╕рд╣реА рддрдХрдиреАрдХ рдПрдХ рдФрд░ рдПрдХ рд╣реА рд╣реЛред рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рддреБрд▓рдирд╛ рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЬрд╛рд▓ рд╣реИред

рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдХреЛрдбреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗред
рдЙрддреНрддрд░
 int myInt = 1; short myShort = 1; object objInt1 = myInt; object objInt2 = myInt; object objShort = myShort; Console.WriteLine(myInt == myShort); // scenario 1 true Console.WriteLine(myShort == myInt); // scenario 2 true Console.WriteLine(myInt.Equals(myShort)); // scenario 3 true Console.WriteLine(myShort.Equals(myInt)); // scenario 4 false! Console.WriteLine(objInt1 == objInt1); // scenario 5 true Console.WriteLine(objInt1 == objShort); // scenario 6 false!! Console.WriteLine(objInt1 == objInt2); // scenario 7 false!!! Console.WriteLine(Equals(objInt1, objInt2)); // scenario 8 true Console.WriteLine(Equals(objInt1, objShort)); // scenario 9 false!?! 


рдЕрд░реЗ рдпреЗ рдХреНрдпрд╛? рдЖрдЗрдП рдЗрд╕реЗ рдХреНрд░рдо рдореЗрдВ рд▓реЗрдВред

рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ == рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред C # рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд == рдСрдкрд░реЗрдЯрд░ рд╣реИрдВред
 object == object string == string int == int uint == uint long == long ulong == ulong ... 

рдЪреВрдБрдХрд┐ рдХреЛрдИ int == short рдпрд╛ short == int рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ int == int рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, short рдХреЛ int short рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рджреЛ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдореВрд▓реНрдп рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реЗ рд╕рдорд╛рди рд╣реИрдВред

рддреАрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЙрд▓рд┐рдВрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ int рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ рдпрд╣ рддреАрди Equals рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
 Equals(object, object) //     object Equals(object) //     object Equals(int) //    IEquatable<int>.Equals(int) 

рдкрд╣рд▓рд╛ рд╣рдореЗрдВ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдмреБрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддрд░реНрдХ рдирд╣реАрдВ рд╣реИрдВред рдЕрдиреНрдп рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ, рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рдЬреЛ int рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ; object рд╕реЗ short int рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, Equals(int) рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдореВрд▓реНрдп рдХреЗ рджреНрд╡рд╛рд░рд╛ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП int рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рд╣реА рд╣реИред

рдЪреМрдереЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ Equals рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЙрд▓рд┐рдВрдЧ рдХрд╛ рдкреНрд░рдХрд╛рд░ short , рдЬрд┐рд╕рдореЗрдВ рдлрд┐рд░ рд╕реЗ рддреАрди Equals рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред
 Equals(object, object) //     object Equals(object) //     object Equals(short) //    IEquatable<short>.Equals(short) 

рдкрд╣рд▓реА рдФрд░ рддреАрд╕рд░реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реА рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдХрдо рддрд░реНрдХ рд╣реИрдВ, рдФрд░ рддреАрд╕рд░реА рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдЪреБрдирд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ short рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреА рдХреЛрдИ рдирд┐рд╣рд┐рдд рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред short.Equals(object) рд╡рд┐рдзрд┐ рдмрдиреА рд╣реБрдИ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
 bool Equals(object z) { return z is short && (short)z == this; } 

рдЕрд░реНрдерд╛рддреН, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ true , рдкреИрдХреЗрдЬреНрдб рддрддреНрд╡ рдХрд╛ рдкреНрд░рдХрд╛рд░ short рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╕рдорд╛рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ int , рдЗрд╕рд▓рд┐рдП рд╡рд┐рдзрд┐ false рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред

рдкрд╛рдВрдЪрд╡реЗрдВ , рдЫрдареЗ рдФрд░ рд╕рд╛рддрд╡реЗрдВ рдореЗрдВ , object == object рддреБрд▓рдирд╛ рдлреЙрд░реНрдо рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ object == object рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд╕рдВрджрд░реНрдн рд╡рд┐рдзрд┐ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкрд╛рдВрдЪрд╡реЗрдВ рдорд╛рдорд▓реЗ рдореЗрдВ рджреЛрдиреЛрдВ рд▓рд┐рдВрдХ рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдЫрдареЗ рдФрд░ рд╕рд╛рддрд╡реЗрдВ рдореЗрдВ рдЕрд╕рдорд╛рди рд╣реИрдВред рдкреНрд░рдХрд╛рд░ object рдЪрд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рдореВрд▓реНрдп рдорд╣рддреНрд╡рд╣реАрди рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдЖрдард╡реЗрдВ рдФрд░ рдиреМрд╡реЗрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ Object.Equals рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 public static bool Equals(object x, object y) { if (ReferenceEquals(x, y)) return true; if (ReferenceEquals(x, null)) return false; if (ReferenceEquals(y, null)) return false; return x.Equals(y); } 

рдЖрдард╡реЗрдВ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд▓рд┐рдВрдХ рд╣реИрдВ рдЬреЛ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ null рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, int.Equals(object) рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк short.Equals(object) рд╡рд┐рдзрд┐ рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ:
 bool Equals(object z) { return z is int && (int)z == this; } 

рдЪреВрдБрдХрд┐ рддрд░реНрдХ рдЯрд╛рдЗрдк int рдХрд╛ рдПрдХ рдкреИрдХреНрдб рдЪрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреБрд▓рдирд╛ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рд╡рд┐рдзрд┐ true рд╣реЛ рдЬрд╛рдПрдЧреАред рдиреМрд╡реЗрдВ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреИрдХреНрдб рдЪрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ short , рдЗрд╕рд▓рд┐рдП, рдкреНрд░рдХрд╛рд░ ( z is int ) рдХреА рдЬрд╛рдВрдЪ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреА, рдФрд░ рд╡рд┐рдзрд┐ false рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред

рдкрд░рд┐рдгрд╛рдо :
рдореИрдВрдиреЗ рджреЛ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреМ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рджрд┐рдЦрд╛рдП, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рддреБрд▓рдирд╛ рдХрд┐рдП рдЧрдП рдЪрд░ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЖрдзреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рддреБрд▓рдирд╛ true ред рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╛рдЧрд▓ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рднреНрд░рд╛рдордХ рд╣реИ, рддреЛ рдЖрдк рд╕рд╣реА рд╣реИрдВ! C # рдореЗрдВ рддреБрд▓рдирд╛ рдмрд╣реБрдд рдХрдкрдЯреА рд╣реИред

Source: https://habr.com/ru/post/In209412/


All Articles