Bir mülkü / üyeyi C # da bildiren tiple aynı şekilde isimlendirmek kötü bir uygulama mıdır?


25

Örneğin, şöyle bir sınıf:

class Dog { } //never mind that there's nothing in it...

ve sonra gibi bir özellik:

Dog Dog { get; set; }

Bana daha yaratıcı bir isim bulamazsam, kullanmam gerektiği söylendi:

Dog DogObject { get; set; }

Bunları nasıl daha iyi adlandıracağınıza dair bir fikriniz var mı?


2
Size söylenen bu gereklilik, belki de iyi bir kılavuzun aşırı uygulanmasından dolayı beynin ölmüş gibi görünmesine neden olur (daha iyi bir ad olduğunda yalnızca tür adını kullanmayın).

2
Bu, C # 'da bile derlenmez, çünkü üye isimleri çevre tipiyle aynı olamaz.
Lee

3
@Lee: Bağlamın mülkün başka bir tür olduğunu düşünüyorum. Örneğin, denilen Personbir Dogözellik içeren bir sınıfDog
goric 26:13

3
Demek istediğim, eğer gerçekten bir köpekse, onu bu şekilde etiketleyin.
Thomas Eding

1
IDE'nizin sözdizimi vurgulaması, tür ve özelliği farklılaştırmalıdır. Bir IDE kullanmadığınızda, içeriğe her zaman bakabilirsiniz.
Cyanfish

Yanıtlar:


22

Kötü bir uygulama olabilir, bağlamda kodunuzda neyden bahsettiğinizin oldukça açık olduğu gerçeği için değildi.

Dog = new Dog();

Tip yapıcı hangisidir? Nesne hangisi? Şaşkın değil mi? Tamam nasıl

Dog = Dog.Create()?

Nesne hangisi? Türdeki statik fabrika yöntemi hangisidir? Hala karıştı değil mi? Ben öyle düşünmedim.

Bunu gördüğüm tek zaman potansiyel bir problem. İsim ağacı oldukça ayrıntılı bir hale geldi ve derleyici belirsizliği anlayamadı.

Dog = new Some.Namespace.Dog();

Her durumda, bu yalnızca Otomatik Özellikler ile (ve belki de enums'lerde) gerçekleşmelidir, çünkü yerel değişken isimleri her zaman camelCased, belirsizlikten tamamen kaçınır.

dog = new Dog();

7
+1. Alternatiflerin hepsi daha kötü: "TheDog", "AnyDog", "MyDog", vb. Ekleyecek bir şey olmadığında, hiçbir şey eklememek en iyisidir.
kevin cline

Sanırım, bir nedenden ötürü Dogbir örnek yöntem denen olsaydı, ikincisinin kafa karıştırıcı olabileceğini Createdüşünürdüm, ancak bu noktada oldukça korkunç kodlama uygulamalarına dalacaktınız.
KDiTraglia

40

Bu sadece makul bir uygulama değil, dil buna izin verecek şekilde özel olarak tasarlandı. Kurallar ve gerekçeler için "Renk Rengi" C # belirtimini arayın ve bkz.

http://blogs.msdn.com/b/ericlippert/archive/2009/07/06/color-color.aspx

Bu karardan kaynaklanan bazı ilginç köşe davaları için.

Hiçbir koşul altında, türüyle aynı olarak adlandırılmasını önlemek için bir mülke "DogObject" adını vermemelisiniz; Bu, doğrudan çerçeve tasarım kılavuzuna aykırıdır.


Özellik türü, kimlikleri kimliği olmayan bir tür ise (örn. Color), Bu tür kullanım makul görünüyor. Değişken ya da IDisposabletürleri ile olsa da, çok sevmiyorum . “Bir kontrol Font”, mülk tarafından kapsanan devlet yönlerini Fontmi yoksa mülk sahibi tarafından belirlenen örneği mi ifade ediyor?
supercat

7

Bunu çağırmak gayet iyi Dogve aslında Microsoft’un Çerçeve adlandırma kılavuzunda önerdiği şey :

CONSIDER, bir mülke türüyle aynı adı vererek verir.

Örneğin, aşağıdaki özellik doğru bir şekilde Renk adında bir enum değeri alır ve ayarlar, böylece özellik Renk olarak adlandırılır.

Ve işte yukarıdaki kılavuzda kullandıkları örnek:

public enum Color {...}
public class Control {
    public Color Color { get {...} set {...} }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.