SORU
30 Temmuz 2015, PERŞEMBE


Aramızda bir tür iç durumunu değiştirebilir mi?

Soru basit. Onsuz iç durumunda dışarıdan görünür değiştirebilecek bir türü olarak kabul edilebilirdeğişmez?

Basitleştirilmiş bir örnek:

public struct Matrix
{
    bool determinantEvaluated;
    double determinant;

    public double Determinant 
    {
         get //asume thread-safe correctness in implementation of the getter
         {
             if (!determinantEvaluated)
             {
                  determinant = getDeterminant(this);
                  determinantEvaluated = true;
             }

             return determinant;    
         }
    }
}

GÜNCELLEME: Oyalama neden olduğu iplik-kesinlik endişelenmekten sorunu. bu açıklık

CEVAP
30 Temmuz 2015, PERŞEMBE


Duruma göre değişir.

Eğer belgeleyen yazarların istemci kod veya mantık olarak bir yazarın istemci kodu, endişe ile arabirim bileşeni (yani, dışarıdan gözlemlenebilir hal ve davranış) ve onun uygulama ayrıntıları (iç temsil).

Bu anlamda, bir tür eğer tembel, vb - Bu mutasyonlar gözlemlenebilir değil sürece dışarıdan başlatır hatta devlet önbelleğe bile değişmez. Diğer bir deyişle, bir tür ortak arayüzü (veya herhangi bir diğer kullanım amacı kendi davalarını) ile kullanıldığında değişmez gibi davranır değişmez.

Tabii ki, bu hakkı elde etmek zor olabilir (değişken iç devlet ile iş parçacığı güvenliği, serialization/marshaling behavior, vs.) ile kendinizi endişe gerekir. Ama doğru farz etsek bile, (ihtiyacınız olan ölçüde, en azından) bir sebep yokdeğilbu tip bir değişmez düşünün.

Belli ki, gelen bir bakış açısı, bir derleyici veya bir iyimserlik, böyle bir türüdür tipik olarak değişmez (sürece derleyicisi olan yeterince akıllı ya da bazı "yardım" gibi ipuçları veya ön bilgi bazı türleri) ve herhangi bir optimizasyon olduğunu amaçlanan için değişmez tipleri olmayabilir uygulanabilir, eğer bu durum böyle.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Just So

    Just So

    3 HAZİRAN 2007
  • paikimchung

    paikimchung

    12 Mayıs 2006
  • Watcher3223

    Watcher3223

    15 Kasım 2007