Wpis z mikrobloga

@WyjmijKija: hm, to wygląda jakby w pierwszym przypadku kompilator wiedział jaki to będzie typ i użył przeładowanego operatora. A w drugim domyślnego tzn. po referencji. Ciekawe ( ͡° ͜ʖ ͡°)
@WyjmijKija: weź nie rzucaj mięsem. Jest to bardziej niż marginalny przypadek i jak dla mnie wskazuje na to, że coś zostało źle zaprojektowane.


P.S. Ja przeważnie przeciążam Equals, bo jest to dla mnie bardziej "explicite", jeżeli już muszę.

@object: jak będę miał jutro więcej czasu to poszukam, bo w sumie kolega wyżej mnie zaciekawił.
@object: Nie wiem czemu mi odpowiadasz konkretnie, ale jak lubisz takie rozkminy to proszę:

Console.WriteLine((object)true == (object)true);
Console.WriteLine((object)"A" == (object)"A");
Console.WriteLine(object.ReferenceEquals("B", "B"));
@WyjmijKija: myślałem, że potwierdzisz bądź zaprzeczysz ( ͡º ͜ʖ͡º)

Console.WriteLine((object)true == (object)true);

Console.WriteLine((object)"A" == (object)"A");

Console.WriteLine(object.ReferenceEquals("B", "B"));

Tutaj easy, przynajmniej tak mi się wydaje..
Boolean jest value typem - castując go na object wymuszamy porównywalnie za pomocą referencji.
String jest ref typem - podczas kompilacji następuje optymalizacja do jednego stringa wiec referencja jest ta sama.
@przekliniak: @harakiri888: "Yoda conditionals" są głównie używane po to, żeby przypadkiem nie napisać "if (var = 1)" zamiast "if (var == 1)".

Jak ktoś przeciąża operator porównania w taki sposób, że działa inaczej w zależności od tego, który obiekt jest po której stronie, to nic go nie uratuje ( ͡° ͜ʖ ͡°)