Özel değişkenlerinizi C # ile nasıl adlandırırsınız? [kapalı]


25

C # 'daki özel değişkenler için en yaygın kullanılan, en çok kullanılan adlandırma kuralları nedir?

  1. private int myInteger;
  2. private int MyInteger;
  3. private int mMyInteger;
  4. private int _myInteger;
  5. private int _MyInteger;
  6. Gizemli diğer seçenek

Hangisini kullanıyorsunuz ve neden? (Şirketim C # için oldukça yeni ve kodlama standartlarımızı denemek ve denemek için en "endüstri tarafından kabul edilen" yöntemi seçmek istiyorum.)


Neden Otomatik Uygulama Özellikleri kullanılmıyor? msdn.microsoft.com/en-us/library/bb384054.aspx
Kyle Ballard

1
C # bunun için standartlara sahip, bkz. Stackoverflow.com/questions/14967/…
Tamara Wijsman

7
Kamuda özel değişkenler hakkında konuşmak hoş değil. Üzgünüm, sadece zorundaydım.
Mark C,

Ben bir yöntem için sadece yerel kapsam dahilinde _someVariable kullanmak dışında azheglov (m_someVariable) ile aynı yöntemi kullanıyorum.
lord-fu

7
@Mark, düşündürücü olmasının "özel üyeler" olması gerektiğini düşünüyorum.
EpsilonVector

Yanıtlar:


44

MSDN sınıfı tasarım kılavuzları http://msdn.microsoft.com/en-us/library/ta31s3bc.aspx, seçenek 1 - myInteger'ı önerir.

Ben her zaman bu tarzı kullandım. _ Karakteri için kişisel bir sevmediğim var.


1
Resharper, istihbaratla eşleşen orta dize ekleyene kadar _ karakterinden hoşlanmadım. Şimdi yazabilirim myIntegerve eşleşecek _myInteger. Fakat
MSDS’nin

4
Seçenek 1 kullanıyorsanız, myIntegerbir yönteme göre yerel bir değişkenin veya özel bir sınıf üyesinin olup olmadığını nasıl anlarım ?
Sihirbaz79

4
@Lorenzo this.myInteger;)
TWith2Sugars

12
Ama ... ... "bu" 4 karakter ve "_" sadece bir karakter! Aslında, bu rehber çok mantıklı geliyor ama benim ofisimde herkes altını çizmeyi seviyor ve ne olursa olsun "this.Foo" yu görmekten nefret ediyor. Bazen önemli olan tek kural, iş yerinizin size zorladığı kurallardır.
CodexArcanum

2
Karakter sayısı hakkındaki tartışma tartışmalıdır. thisHer seferinde yalnızca aynı ada sahip yerel bir değişkenin bulunduğu yöntemlerde yazmanız gerekmez . Ancak, alt çizgi kullanıyorsanız, her seferinde ekstra bir sembol yazmanız gerekir. Kabul ettiğim şeyle, yerel kod stili sözleşmenize bağlı kalmanın her zaman önemlidir.
Malcolm,

25

Yukarıdaki 4 numaralı seçeneği kullanıyorum:

private int _myInteger;

Değişken isimlerimde bazı kapsam göstergelerine sahip olmak isterim ve alt çizgi bu amaç için yeterlidir. Ayrıca okumak oldukça kolaydır.


5
Özellikle birkaç değişkenle çalışmak zorundaysanız okunmanın kolay olduğu konusunda hemfikir değilim.
Restuta

15

Aşağıdaki adlandırma şemasını kullanıyorum:

  • Yerel kapsamlı değişkenler için 1. (myInteger)
  • Genel özellikler için 2. (MyInteger)
  • Özel değişkenler için 4. (_myInteger)

14

Bence seçenek 4 gerçekten en okunaklı seçenek. Bunu yapmak zorunda kalmanıza yardımcı olur:

public Person(string name, int age) 
{
    this.name = name;
    this.age = age;
}

Aynı zamanda tüm özel üyelerin daha dikkat çekici olmasını sağlar. Aşağıdaki örnekte, halter nereden agegeliyor? Niteleyici olmadan thisbunu söylemek daha zor.

private void Method()
{
    var x = 2;
    var y = age + x;
}

Bunu anlamak çok daha kolay:

private void Method()
{
    var x = 2;
    var y = _age + x;
}

1
İlk örneğinize göre yemin ederim, ancak 4 numaralı seçeneği bir süre denedikten sonra, özel alanlar için ön ek olarak alt çizgi kullanmayı tercih ederim.
Jeremy Wiebe

2
Diyelim ki, özel değişkenler için 1 kullanın, özelliklerde kullanılan özel değişkenler için 4 kullanın.
Evan Plaice

2
ChaosPandoin ile aynı fikirde değilim. Bana göre, Method () 'in her iki uygulamasının da okunması kolaydır. Yaş değişkenini (veya _age) gördüğümde ve yöntemde bildirilmediğini fark ettiğimde, sınıfın başka bir yerinde bildirilmesi gerektiğini fark ettim. Bu niteleyici korkunç ama en azından yapıcı yöntemle sınırlı.
David Kennedy,

10

İlk olarak, PascalCasing genellikle sınıfın genel özellikleri, eksileri, yöntemleri, vb. İçin ayrılmıştır. Böylece 2 ve 5'i atlardım.

İkincisi, Macar dünyasındaki notaların .NET dünyasında cesareti kırılmış, yani (sanırım) 3 haklı. Varsayalım ki, 3 ile olan budur.

Bu camelCasing ve _camelCasing ile bırakır. Genelde sınıf değişkenleri için _camelCasing ve bir metodu kapsamalı veya daha dar değişkenler için düz eski camelCasing kullanıyorum. Deve kasası, yöntem argümanları, korumalı / özel değişken isimleri ve bir metot veya daha dar kapsamdaki değişkenler için kullanılan kabul edilmiş standarttır.

Ben de alt çizgi ile hazırlanmayı seviyorum, böylece özel değişkenlerim istihbaratımda gruplandırılıyor. Ancak, bunu yalnızca bir türe dahil edilen değişkenler için yapıyorum. Bir yöntem veya daha dar bir kapsamda bildirilen değişkenler alt çizgiyi kapalı tutarım. Ayrılmalarını ve daha az kullanılan değişkenleri bir arada tutmalarını kolaylaştırır.


2
Neden sınıf değişkenleri için _camelCasing'i kullandığınızı anlamıyorum, çünkü bunların genellikle sınıf değişkenleri olduğu açıktır.
alternatif

1
@ math hayır, intellisense içinde açık değil. Unutmayın, alanlar (sınıf kapsamındaki değişkenler) yöntem kapsamındaki değişkenlerle aynı simgeye (hemen hemen) sahiptir, bu nedenle yakından bakmazsanız tam olarak aynı görünürler. Alt çizgi, görsel olarak ayırt edilmelerine yardımcı olur ve gruplandırılmış halde tutarlar; bu da sık kullanmamanız durumunda size yardımcı olur (ki bu, hatasız programlama düşmanı olarak olmamalısınız).
Ripped Off

Intellisense hakkında hiçbir şey söylemedim. Color.ClassMethod () ve myColor.InstanceMethod () arasındaki farktan bahsediyorum, yani Color bir sınıf olduğundan ClassMethod () 'nin bir sınıf yöntemi olduğu açık olmalıdır.
alternatif

Daha önce @ math: I don't understand why you would use _camelCasing for class variables sen sonra: I'm talking about the difference between Color.ClassMethod() and myColor.InstanceMethod()Kafam karıştığım için afedersiniz . Dinle, sınıf değişkenlerini nadiren kullanırım, bu yüzden isimlerini hatırlatmak, _ tuşuna basarak ve hepsinin intellisense içinde iyi ve gruplanmış olarak görünmesini sağlamak güzeldir.
Ripped Off

2
@ mathepic: Will "sınıf değişkenleri" derken, (özel) örnek alanları anlamına gelir. Statik üyeler demek istediğini yorumlamış gibisin; ama öyle demedi.
Dan Tao,

4

private int integer

Bir yöntem kapsamındaki üye ve yerel değişkenler arasında karışıklık yaşarsanız, muhtemelen yeniden yönlendirmeniz gerekir.


+1: Mesele budur. BTW: Kaynağını görüyorum ama integerbelki daha iyi bir şekilde isimlendirilebilir valuemi?
Kurt

2

Bunu yapmanın en iyi yolunun (yine de C # /. Net'te) 2 ve 6'nın bir birleşimi olduğuna inanıyorum:

private int MyInteger { get; set; }

Teorik olarak burada hiçbir değişken yoktur, ancak özel bir örnek değişkeni gibi görünür ve davranır. Bu değere bir işletme mantığı eklememiz gerekirse (bu tamamen içsel bir değerdir, bu yüzden istediğimiz her şeyi yapabiliriz) o zaman bizim için zaten özelliklidir. Sıcak bir buharda kazanma!


2

Seçenek 4'ü yapıyorum çünkü SSCLI buna benziyor, ama dürüst olmak gerekirse, özel değişkenin ismini pek umursamıyorum. Halk farklı bir hikaye.

BTW unuttun m_MyInteger


2

Buna "benim" bir şey demem!

Ama derdim ki

class C
{
     int VariableName { get; set; }
}

oldukça sık bu, açık değişkenlere sahip olmaktan daha iyidir. Açık bir özel değişkenim olsaydı ben arardımint _variableName;


1

C ++ 'da editörleri değiştirdiğimde _ kullanmaya meyilliyim, ki bu özel olup olmadığını görmeme izin vermiyor.

C # için Visual Studio'nun özel olup olmadığını görmeme izin verdiği için _'leri bırakma eğilimindeyim.

Bunu yapmak için Deve Kasasını kullanma eğilimindeyim.


1

4 ( private int _myInteger;) kullanıyorum çünkü:

private int myInteger;

Yerel değişkenlerimi bu şekilde adlandırıyorum.

private int MyInteger;

Sabitleri bu şekilde adlandırıyorum.

private int mMyInteger;

Bu C # tarzı değil.

private int _MyInteger;

Bu garip görünüyor.


1

alt çizgi ile.

Bill Wagner neden Etkili C # da açıklıyor . Ama tam sayı bir isim asla benim Tamsayı , _age veya _length gibi daha iyi bir şey. TypeName örnek adına dahil etmek korkunç bir uygulamadır. İsimler açıklamalı olmalı ve C # Tipi Güvenli olduğu için her zaman uygun tipler bulunabilmelidir.


1
Evet, yine de bir örnekti.
Vaccano

1

Daha spesifik bir örnek vermeniz gerekir, ancak:

private int count, private int badFileCount,private static readonly int ReconnectAttemptsLimit

Bu arada, en son ve en iyiyi kullanmaya başladığınızda ve bunlara başladığınızda tüm bu BEDAVA olsun MSFT Stylecop.


0

Ben seçenek 5 ile giderim: private int _MyFoo

Gerçi _myFoo üzerinde herhangi bir gerçek rekabet avantajı görmüyorum.


0

Gibi özel değişkenler için camelCasing kullanın myInteger

Bir önceki düşünün _bir özellik confusions- azaltmak için değişken bir yedek ise
Değişken _myPropertyözelliği içinMyProperty


0

Değişkenlerimi ReSharper olarak adlandırıyorum, sadece benim değil, herkes de bunu yapıyor. Proje boyunca çok fazla tutarlılık var.


0

Juval Lowy'nin IDesign C # Kodlama Standardı oldukça popüler. Bu standart, özel üye değişkenlerinin "m_" (Seçenek 6) ile öneklendirilmesini önerir. Takımımızda yaptığımız şey bu.

private int m_myInteger;

Seçenek 4 ( _myInteger) bu standardın kabul edilebilir bir varyasyonudur.

MSDN önerisini ( myInteger) beğenmedim , çünkü özel bir üyeye yerel bir değişkenden bahsetmeyi zorlaştırıyor. Onların önerileri, elbette, bu sorunu thisbana gereksiz kılan özel üyelere niteleyerek çözüyor .

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.