SORU
8 AĞUSTOS 2011, PAZARTESİ


Neden bu tür özel özel alanlar, örnek değil mi?

C# (ve diğer birçok dilde) mükemmel meşru aynı türün diğer örnekleri özel alanlarına erişim için. Örneğin:

public class Foo
{
    private bool aBool;

    public void DoBar(Foo anotherFoo)
    {
        if(anotherFoo.aBool) ...
    }
}

C# specification (3.5.1, 3.5.2) belirttiği gibi özel alanlara erişim türü, bir örnek değil. Bir meslektaşı ile tartışırken oldum ve bu gibi (yerine aynı örneği erişimi kısıtlama) işe yaramasının sebebi ile gelmek için çalışıyoruz.

Bulabildiğimiz en iyi argüman sınıfın başka bir örneği ile eşitlik belirlemek için özel alanlara erişim için isteyebilirsiniz nerede eşitlik denetler. Başka bir sebep var mı? Ya bu ya da bir şey tamamen imkansız gibi çalışmak gerektiği anlamına gelir bu Altın neden?

CEVAP
8 AĞUSTOS 2011, PAZARTESİ


Bu şekilde erişim değiştiricileri çünkü çalışır bir nedeni de varderleme zamanı. Gibi ya da değil, belirli bir nesne olup olmadığını belirleme demevcutnesne yapmak kolay değil. Örneğin, bu kodu göz önünde bulundurun:

public class Foo
{
    private int bar;

    public void Baz(Foo other)
    {
        other.bar = 2;
    }

    public void Boo()
    {
        Baz(this);
    }
}

Derleyici mutlaka other aslında this olduğunu anlamaya olabilir? Her durumda değil. Bu sadece derlemek gerekmez mi o zaman ileri sürülebilir, ama bu özel bir örnek üye bir kod yolu var demektirdoğru örnekhatta daha kötü olduğunu düşünüyorum erişilebilir değil.

Sadece tip-level yerine seviye nesne görünürlüğünü sorun çözülebilir sağlar gerektiren, yanı sıra gibi görünen bir durumgerekiraslındaiş.

EDİTBu mantık geriye doğru Danilel Hilgarth nokta değeri var mı. Dil tasarımcılar istedikleri dil oluşturabilir ve derleyici yazarları için uygun olmalıdır. Bu varlık, dil tasarımcıları derleyici yazarları işlerini kolaylaştırmak için bazı teşvik eden bir şey var. " dedi. Bu durumda (gerçi, yeterince kolay özel üye olabileceğini savunuyorlarsadecethis üzerinden (ya da örtülü)).

Ancak, bu konu olması gerekenden daha karmaşık hale getirir inanıyorum. Sonuçta, bu . çoğu kullanıcı (ben de dahil) unneccessarily eğer yukarıdaki kod işe yaramadı eğer sınırlama bulur: ^em>benimveri erişimi için çalışıyorum! Neden this yaşamamalı mıyım?

Kısacası, "" derleyici için. zor olduğu için dava abartmış olabilirim Gerçekten kızdırmak için ne anlama geldiğini yukarıda durumu tasarımcılar iş yapmak istiyorlar gibi görünüyor.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LearnKey

    LearnKey

    19 AĞUSTOS 2008
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011
  • PUSHER

    PUSHER

    11 HAZİRAN 2014