2016-04-21 31 views
8

İstisna işleme, günlüğe kaydetme, vb. Için nameof() işlecinin kullanımını anlıyorum. Ancak, aşağıdaki bazı Microsoft kodlarından doğrudan gelen aşağıdaki örneği anlamıyorum.nameof() işleç statik dize için

public static class SessionKeys 
{ 
    public static class Login 
    { 
     public static string AccessToken = "AccessToken"; 
     public static string UserInfo = "UserInfo"; 
    } 
} 

cevap

15

nameof derleme değerlendirilir bir operatördür zaman, böylece bir kez uygulamanız derlendiğinde, aslında bu iki çözüm arasında bir fark yoktur.

Ancak bu durumda nameof kullanarak birkaç avantajı vardır:

  • Bu dize değeri az “sihirli” yapar. Bu nedenle, bir bağlantısız büyü dizgisi olmak yerine, bu değerin arkasındaki anlamsal mantık çok açıktır: Değişkenin kendisinin adıdır.
  • Ad, adın gerçek bir referansıdır, bu nedenle her ikisi de bağlanır. Bu, her ikisini de yeniden düzenlemenizi ve diğerini otomatik olarak etkilemenizi sağlar. Aynı zamanda bu dizgeye referanslar ararken “string” in referans olarak görünmesini sağlar. Yani tam olarak nerede kullanıldığını biliyorsun.
6

Basitçe, ilk örnek başvurulan değişken adından atanan değer elde daha ikinci keyfi bir dize değeri elde oysa

public static class SessionKeys 
{ 
    public static class Login 
    {   
     public static string AccessToken = nameof(AccessToken); 
     public static string UserInfo = nameof(UserInfo); 
    } 
} 

Nasıl ki daha yararlı olduğunu olabilir veya may değişken adıyla eşleşmez.

Sonuç olarak, değişkenlerin adını yeniden gözden geçirirseniz, bu değişkenlerle ilişkilendirilen değer ilk örnekte otomatik olarak güncellenir, oysa dize değerini de güncellediğinizden emin olmanız gerekir. ikinci örnek.

Her iki (LINQPad başına) değerlendirme yığını üzerine statik alan değerini iterek başlık altında aynı IL derlemek unutmamak gerekir:

IL_0001: ldsfld  UserQuery+SessionKeys+Login.AccessToken