SORU
29 Mart 2009, Pazar


Neden Özelliklerini kullanarak C kaçınmalısınız#?

Muhteşem kitabı, C) CLR# Jeffrey Richter özellikleri sevmediğini söyledi, ve bunları kullanmak için değil önerir. Bazı sebep verdi, ama gerçekten anlamıyorum. Kimseye etmem gerektiğini veya özelliklerini kullanmak için bir neden söyleyebilir misin? Otomatik özellikleri ile C# 3.0,, bu değişir mi?

Bir referans olarak, Jeffrey Richter görüşleri ekledi:

Bir özellik olabilir. • salt okunur ya da salt yazılır; alan erişim her zaman okunabilir ve yazılabilir. Sana bir özellik tanımlarsanız, en iyi ve set erişimci yöntemleri almak sunuyoruz.

• Özellik yöntemi bir özel durum; alan erişim hiç bir istisna atar.

Mülk herhangi bir yöntem için bir out veya ref parametresi olarak geçirilen•; bir alan. İçin örneğin, aşağıdaki kod derleme değil

using System;
public sealed class SomeType
{
   private static String Name 
   {
     get { return null; }
     set {}
   }
   static void MethodWithOutParam(out String n) { n = null; }
   public static void Main()
   {
      // For the line of code below, the C# compiler emits the following:
      // error CS0206: A property or indexer may not
      // be passed as an out or ref parameter
      MethodWithOutParam(out Name);
   }
}

• Özellik yöntemi yürütmek için saat sürebilir; alan erişim hemen her zaman tamamlanır. Özelliklerini kullanmak için ortak bir neden olan iş parçacığı eşitleme gerçekleştirmek için. konu sonsuza dek durduracak ve bu nedenle, bir iş parçacığı Eşitleme özelliği ise kullanılmamalıdır gereklidir. Bu durumda, bir yöntemi tercih edilir. Eğer sınıf varsa da, erişilebilir uzaktan (örneğin, sınıf Sistemi türetilmiştir.MashalByRefObject), özellik yöntemi çok yavaş olacak, ve bu nedenle arama, bir yöntemi tercih edilir özellik. Bence, sınıfları Adıyla türetilen asla kullanmam gerekir özellikleri.

• Eğer bir satırda birden çok kez aradı, özellik bir yöntemi farklı bir değer her döndürebilir zaman; bir alana aynı değeri her zaman verir. Sistem.DateTime sınıfı salt okunur var Şimdi geçerli tarih ve saati döndürür bir özellik. Her zaman bu sorgu özellik, farklı bir değer döndürür. Bu bir hata, ve Microsoft onlar bunu istiyor Şimdi bir özellik yerine bir yöntem yaparak sınıf düzeltebilir.

• Özellik yöntemi gözlemlenebilir yan etkilere neden olabilir; alan erişim Hiç Yok. Diğer kelimeler, bir tür bir kullanıcı çeşitli özelliklerini herhangi bir tür tarafından belirlenmiş olmalıdır o sipariş veya yazın herhangi bir farklı davranış, farkında olmadan o seçer.

Tesiste bir yöntem ek bellek gerektirir ya da bir şey için bir başvuru döndürmek olabilir. • döndürülen nesne değiştirme yok yani aslında nesnenin durumu, bir parçası değil, orijinal nesne üzerinde etkisi; bir alan sorgulama her zaman bir nesneye bir başvuru döndürür orijinal nesnenin devletin parçası olması sağlanır. Tesiste çalışan bir kopyasını geliştiriciler için çok kafa karıştırıcı olabilir, ve bu özelliği sık sık verir belgelenmiş değil.

CEVAP
29 Mart 2009, Pazar


Sevmeme özellikleri için Jeff'in sebebi alanları gibi görünüyorlar çünkü farkı anlamayan geliştiriciler alanları eğer onlar gibi onları, vb yürütmek için ucuz olacak varsayarak tedavi edecektir.

Şahsen ben bu konuda onunla aynı fikirde değilim - özellikleri müşteri eşdeğer yöntem çağrıları daha okumak çok daha basit bir kod buldum. Geliştiriciler özellikleri temelde kılık yöntemleri olduğunu bilmek lazım kabul ediyorum - ama bu konuda geliştiriciler eğitmek kod, zor kullanma yöntemleri okuma yapmak daha iyi olduğunu düşünüyorum. (Özellikle, birkaç alıcıları ve ayarlayıcıları aynı açıklamada çağrıldığını Java kod gören eşdeğer olduğunu biliyorum C# kod çok okumak daha kolay olurdu. Demeter kanunları çok iyi bir teori ama bazen foo.Name.Length Gerçekten kullanımı...) doğru değildir

(Ve hayır, otomatik olarak uygulanan özellikler gerçekten bu herhangi bir değişiklik yok.)

Bu uzantı yöntemleri kullanarak karşı argümanlar gibi hafif - muhakeme anlayabiliyorum, ama pratik yararı idareli kullanıldığında) benim görüşüme göre dezavantajı daha ağır basar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fufko

    fufko

    27 ŞUBAT 2006
  • Michael Lummio

    Michael Lumm

    25 Mayıs 2007
  • pissengehen

    pissengehen

    26 EYLÜL 2006