2015-05-23 28 views
7

Bu soru, == ve Equals arasındaki farklarla ilgili değildir. neden farklı tasarlanmışlar. Aynı varlığın iki örnekleri içinNeden Equals() ve == farklı olarak tasarlandı?

  • Equals ve == verim farklı sonuçlar: Biz farkları bilmek

    ön anlamak oldukça kolay olmalı birçok sorunu neden olur. == polimorfik olmadığı için

  • == verim farklı sonuçlar, alt sınıfları karşılaştırırken
+0

Steve, sonuca varmadan önce sorularımın ilk satırını okumaya ne dersiniz? Fark hakkında değil, ama NEDEN farklı tasarlandı. Tamamen farklı bir soru. –

+4

@Claies Sanırım yeterince açık değil. –

+1

Cümleler, kesinlikle bilmiyorum, çünkü tüm aramalarım farklılıkların farklı açıklamalarına işaret ediyor. Hiçbiri farklı amaçlar hakkında değil. Neden farklı amaçları açıklamıyorsunuz ya da bir link göndermiyorsunuz? –

cevap

3

Kısa cevap C# dili tasarım ekibi ve .NET framework tasarım ekibi en iyi değerleri karşılaştırmak için nasıl anlaşamadı olmasıdır/eşitlik için nesneler, böylece her biri kendi sistemini uyguladı.

Daha teknik, ayrıntılı bir yanıt için lütfen a blog post on the subject by Eric Lippert'a bakın.

+2

Bu, IL dilinde operatörler için destek olmadığı gerçeği ile gösterilebilir. C# derleyicisi (ve diğer "uyumlu" diller) tarafından "(özel adlar ve özel adlar ile) yöntemleri kullanarak" yerleşik "... https://msdn.microsoft.com/en-us/library/aa735713 (v = vs.71) .aspx *** Operatör aşırı yüklenmesi CLS ** 'de değil. Ancak, CLS, yararlı adlar (Add() gibi) sağlama ve meta verilerde bir bit ayarlama hakkında yönergeler sağlar. Operatör aşırı yüklemesini desteklemeyi tercih eden derleyiciler bu yönergeleri takip etmeli, ancak bunu yapmak zorunda değildir.* # – xanatos

+0

Eskiden C# için bir Dil Tasarımcı olan Eric Lippert, Çerçeve Tasarımcılarının muhtemelen doğru çerçeve kararını verdiğini kabul ediyor, basitleştirici ifadelerinizde * büyük ölçüde yanlış oluyor *. Cevabınız, daha sonra işaret ettiği gibi yanlış bir şekilde göründüğü için sadece bir bağlantıdan daha kötü hale gelir. –

+1

@PieterGeerkens, C# /. NET'te eşitlik yapmanın iki yolu vardır (aslında üç, ama ikiye yapalım). Dolayısıyla, iki grubun iki farklı sistemi kabul edip uygulayamayacağına karar verirseniz, tek bir mutabakat grubunun, iki uyumsuz eşitlik sistemi yaratmanın iyi bir fikir olacağını düşündüğü fikrini bırakmış oluruz. Her nasılsa, benim özetimin, “büyük ölçüde yanlış” olmaktan uzak, son derece doğru bir gerçektir. Alternatif için çok endişe verici. –

İlgili konular