2012-02-07 20 views
7

documentation for the keyword "is" devletler:anahtar kelime ve Eşittir yönteminin geçersiz kılma "dır"

is operatörü olan tek referans dönüşümleri, boks dönüşümler ve unboxing dönüşümleri dikkate alır. Kullanıcı tanımlı dönüşümler gibi gibi diğer dönüşümler dikkate alınmaz.

Pratikte ne anlama gelir? Bir yapının belirli bir tür olup olmadığını kontrol etmek yanlış mı kullanılır? Örneğin ,

public struct Point2D 
{ 
    public int X; 
    public int Y; 

    ... 

    public override bool Equals(Object value) 
    { 
     if (value != null && value is Point2D) // or if (value != null && GetType() == value.GetType()) 
     { 
      Point2D right = (Point2D)value; 
      return (X == right.X && Y == right.Y); 
     } 
     else return false; 
    } 

    ... 
} 
+1

Bu yanlıştır, value.GetType() == typeof (Point2D) sizi refactoring kazalarına karşı korur. –

+1

[this] (http://stackoverflow.com/questions/983030/type-checking-typeof-gettype-or-is) nedeni nedir? – enzom83

+0

@ enzom83 Bu doğru. Point2D'den miras almayı önemsiyorsanız ve aynı mantığa sahip olmak istiyorsanız (varsayılan olarak) bu durum için uygun olabilir. – McKay

cevap

6

bir yapı, belirli bir tip gayet iyi olup olmadığının kontrol edilmesi. Belgeleme, kullanıcı tanımlı bir operatör, söz konusu türe dönüştürülebilen kullanıcı tanımlı bir operatör olsa bile, kullanıcı tanımlı explicit ve implicit dönüşüm işleçlerinin belirtilen türden olup olmadığına bakılmaksızın değerlendirilmediği anlamına gelir.