Üye bağlamda anlamsız olduğunda bunu yapmak iyi bir formdur. Örneğin, IList<T>
dahili bir nesneye yetki vererek uyguladığınız salt okunur bir koleksiyon oluşturursanız, şöyle bir _wrapped
şeye sahip olabilirsiniz:
public T this[int index]
{
get
{
return _wrapped[index];
}
}
T IList<T>.this[int index]
{
get
{
return this[index];
}
set
{
throw new NotSupportedException("Collection is read-only.");
}
}
public int Count
{
get { return _wrapped.Count; }
}
bool ICollection<T>.IsReadOnly
{
get
{
return true;
}
}
Burada dört farklı vakamız var.
public T this[int index]
arayüzden ziyade sınıfımız tarafından tanımlanır ve bu nedenle elbette açık bir uygulama değildir, ancak T this[int index]
arayüzde tanımlanan okuma-yazma işlemine benzediğini, ancak salt okunur olduğunu unutmayın .
T IList<T>.this[int index]
açıktır, çünkü bir kısmı (alıcı) yukarıdaki mülkle mükemmel bir şekilde eşleşir ve diğer kısmı her zaman bir istisna atar. Arayüz yoluyla bu sınıfın bir örneğine erişen biri için hayati olmakla birlikte, sınıf türünün bir değişkeni aracılığıyla kullanan birisinin anlamı yoktur.
Benzer şekilde bool ICollection<T>.IsReadOnly
, her zaman doğru döneceğinden, sınıfın türüne karşı yazılan kodu tamamen anlamsızdır, ancak arayüzün türü aracılığıyla bunu kullanması için hayati önem taşıyabilir ve bu nedenle açıkça uygularız.
Buna karşılık, public int Count
kendi türüyle bir örneği kullanan biri için potansiyel olarak yararlı olabileceğinden açıkça uygulanmaz.
Ancak "çok nadiren kullanılan" durumunuzla, açık bir uygulama kullanmamaya çok güçlü bir şekilde eğilirim.
Sınıf türünün bir değişkeni yoluyla yöntemi çağıran açık bir uygulama kullanmanızı öneririm durumlarda ya bir hata (dizinlenmiş ayarlayıcıyı kullanmaya çalışırken) ya da anlamsız (her zaman aynı olacak bir değeri denetleme) kullanıcıyı buggy veya en uygun olmayan koddan koruyorsunuz. Bu, nadiren kullanıldığını düşündüğünüz koddan önemli ölçüde farklıdır . Bunun için EditorBrowsable
üyeyi zekâdan gizlemek için bu özelliği kullanmayı düşünebilirim ; insanların beyninin zaten ilgilerini çekmeyen şeyleri filtrelemek için kendi yazılımları var.