Altını çizmek veya altını çizmemek, işte soru bu


131

İkili sürüm diğer çerçeve dilleri tarafından kullanılacaksa, özel alanların ön ekine C # 'da alt çizgi koymama konusunda herhangi bir sorun var mı? Örneğin, C # büyük / küçük harf duyarlı olduğundan, bir alanı "foo" ve genel özelliği "Foo" olarak çağırabilirsiniz ve sorunsuz çalışır.

Bunun VB.NET gibi büyük / küçük harfe duyarlı olmayan bir dil üzerinde herhangi bir etkisi olur mu, isimler yalnızca büyük / küçük harfe göre ayırt edilebiliyorsa, CLS uyumu (veya diğer) sorunları olur mu?


18
Alt çizgi öneki BTW'nin amacı, vaka sorunlarını ele almak değildir. Kod okurken alanları ve yerelleri kolayca ve görsel olarak ayırt edebilmek için. Bunu hem C # hem de VB'de kullanacağım.
Neil Hewitt

2
@NeilHewitt: Ayrıca, işlev parametrelerinin üye değişkenlerle çakışmasını da önler, bu da her birinin başına thisberbat bir şekilde eklenmesini gerektirir . DÜZENLEME: Ben sadece ... bir dört yaşındaki bir yoruma yanıt verdi
Ed S.

Açıklık getirmek için resmi standart _camelCase(salt okunurdur
Chris Marisic

Özel destek mağazaları için _camelCase'i tercih ediyorum. yani: bir mülk aracılığıyla atanan ve erişilen verileri tutan özel dosyalandı. Otomatik özellikleri sevmiyorum çünkü sınıf tanımında bilinen bir değere başlatılamıyorlar ve ayarlayıcıda bir yan etki istiyorsam, açıkça bildirilmiş bir destek deposuna ihtiyacım var. Ne yazık ki, c # düzenleyicide ^ R ^ E kullandığımda bu yeniden düzenleniyor, bu yüzden onu her seferinde tekrar eklemem gerekiyor.
TomXP411

Yanıtlar:


47

Hiçbir etkisi olmayacak .

CLS uyumlu kitaplıklar yazma tavsiyelerinin bir kısmı, yalnızca duruma göre farklılık gösteren iki genel / korumalı varlığa sahip OLMAMALIDIR , örn.

public void foo() {...}

ve

public void Foo() {...}

tarif ettiğiniz şey sorun değil çünkü özel öğe kitaplığın kullanıcısı tarafından kullanılamıyor


1
Etkisi olmayacak olsa bile, yine de rahatsız olacağım bir kongre - çünkü yalnızca duruma göre farklılık gösteriyorlarsa kafa karışıklığı için bir reçete. Tek fark ilk sermaye ise, yanlış okumak veya yanlış yazmak çok kolaydır.
ChrisA

2
Not: Şahsen, C # 'da altını çizmiyorum. Benim için bu kişisel bir tercih, dini bir inanç değil
Binary Worrier

1
Her iki yolu da yaptım ve bilgiye dayalı olarak bir ve herkes için
kararımı vermek istedim

46
Alt çizgi kullanıyorum. Bunları bağımsız değişkenlerden ve yerel değişkenlerden ayırt etmek daha kolaydır.
Rinat Abdullin

4
_ 'İ yalnızca özel alanlar için kullanıyorum, ancak 3.5 otomatik mülkiyet nedeniyle neredeyse hiç özel alanım olmadı. Genel olarak, özel bir alanımın olduğu tek zaman, ilkel olmayan türlerde tembel yükleme uygularsamdır.
Chris Marisic

280

ÖNEMLİ GÜNCELLEME (12 Nisan 2016):

NET CoreFX ekibinin dahili standardının, neden olduğuna dair herhangi bir fikir vermeden alt çizgi gösterimini kullanmakta ısrar ettiği dikkatimizi çekti . Biz kural 3. yakından bakmak Ancak eğer bir sistem olduğu ortaya çıkıyor _, t_, s_neden önerir öneklerle _ilk etapta seçildi.

  1. Biz kullanmak _camelCaseiç ve özel alanlar için ve nerede salt okunur mümkün kullanın. Örnek alanları önek _, statik alanlar ile s_ve statik alanlar ile iş parçacığı t_. Statik alanlarda kullanıldığında, readonlysonra gelmelidir static(yani static readonlydeğil readonly static).
  2. this.Kesinlikle gerekmedikçe kaçınırız .

Dolayısıyla , performans açısından kritik, çok iş parçacıklı, sistem düzeyinde kodlar üzerinde çalışan .NET CoreFX ekibi gibiyseniz , o zaman şunları yapmanız ŞİDDETLE ÖNERİLİR:

  • kodlama standartlarına bağlı kalmak ve
  • alt çizgi gösterimini kullanın ve
  • bu cevabı daha fazla okumayın

Aksi takdirde lütfen okumaya devam edin ...

ORİJİNAL CEVAP:

Önce neden bahsettiğimiz konusunda anlaşalım. Sorun, görünürlük değiştiriciler izin veriyorsa, örnek üyelerine statik olmayan yöntemler ve bir sınıfın / alt sınıfların yapıcılarından nasıl erişeceğimizdir.

Underscore-notasyonu

  • özel alanların adlarında "_" ön ekini kullanmanızı önerir
  • ayrıca kesinlikle gerekli olmadıkça "bunu" kullanmamanız gerektiğini söylüyor

Bu gösterimde

  • her zaman "bunu" kullanmanızı önerir. herhangi bir örnek üyesine erişmek için

Bu gösterim neden var?

Çünkü sen böyle

  • aynı adı paylaştıklarında bir parametreyi bir alandan ayırmak
  • mevcut örnek bağlamında çalıştığınızdan emin olun

Misal

public class Demo
{
   private String name;
   public Demo(String name) {
       this.name = name;
   }
}

Alt çizgi gösterimi neden var?

Bazı insanlar "bu" yazmayı sevmezler, ancak yine de bir alanı ve bir parametreyi ayırt etmek için bir yönteme ihtiyaç duyarlar, bu nedenle bir alanın önünde "_" kullanmayı kabul ettiler

Misal

public class Demo
{
   private String _name;
   public Demo(String name) {
      _name = name;
   }
}

Kişi bunun sadece kişisel zevk meselesi olduğunu ve her iki yolun da eşit derecede iyi / kötü olduğunu düşünebilir. Bununla birlikte, bu gösterimin alt çizgi gösterimini geçtiği bazı yönler vardır:

berraklık

  • altçizgi notasyonu isimleri karıştırır
  • this-notation isimleri olduğu gibi tutar

Bilişsel yük

  • Alt çizgi notasyonu tutarsızdır, alanları özel bir şekilde ele almanızı sağlar, ancak bir mülke veya bir alana ihtiyacınız olup olmadığını kendinize her sormanız gerektiğinde diğer üyelerle birlikte kullanamazsınız.

  • bu notasyon tutarlı, düşünmek zorunda değilsiniz, sadece herhangi bir üyeye atıfta bulunmak için her zaman "this" i kullanıyorsunuz

GÜNCELLEME: belirtildiği gibi aşağıdakiler bir avantaj noktası değildir

Bakım

  • Altçizgi notasyonu, _yeniden düzenleme yaparken göz kulak olmanızı gerektirir , örneğin bir alanı özelliğe dönüştürmek (kaldır _) veya tersini (ekle _)

  • bu notasyonun böyle bir sorunu yok

Otomatik tamamlama

Örnek üyelerinin listesini görmeniz gerektiğinde:

  • Alt çizgi notasyonu size pek yardımcı olmaz, çünkü "_" yazdığınızda otomatik tamamlama açılır penceresi size özel alanları ve diğer örnek üyeleriyle karışık bağlantılı derlemelerde bulunan tüm türleri gösterir.
  • Bu notasyon size net bir cevap verir, "bu" yazarak tüm gördüğünüz üye listesidir, başka hiçbir şey görmez

belirsizlik

Bazen Intellisense'in yardımı olmadan kodla uğraşmanız gerekir. Örneğin, kod incelemeleri yaptığınızda veya kaynak koda çevrimiçi olarak göz attığınızda.

  • Alt çizgi notasyonu belirsizdir: Something.SomethingElse'i gördüğünüzde, Something'in sınıf olup olmadığını ve SomethingElse'nin statik özelliği olup olmadığını söyleyemezsiniz ... ya da Something, SomethingElse'nin kendi özelliğine sahip geçerli bir örnek özelliğidir.

  • this-notation açıktır: Something.SomethingElse'i gördüğünüzde, yalnızca statik bir özelliği olan bir sınıf anlamına gelebilir ve bunu gördüğünüzde.Something.SomethingElse, Something'in bir üye ve SomethingElse'nin özelliği olduğunu bilirsiniz.

Uzatma yöntemleri

"This" kullanmadan örneğin kendisinde uzantı yöntemlerini kullanamazsınız.

  • Alt çizgi gösterimi "this" kullanmamanızı gerektirir, ancak uzantı yöntemlerinde
  • bu not sizi tereddüt etmekten kurtarır, her zaman "bu" noktasını kullanırsınız.

Visual Studio desteği

  • Alt çizgi notasyonu, Visual Studio'da yerleşik bir desteğe sahip değildir
  • this-notation, Visual Studio tarafından doğal olarak desteklenir:

    1. "Bu." Nitelendirme : Statik olmayan yöntemlerde kullanılan tüm statik olmayan alanları this.C # ile önceden eklenmesini tercih eder

Resmi tavsiyeler

Özellikle C # 'da açıkça "alt çizgi kullanmayın" diyen birçok resmi yönerge vardır.


22
Bu harika bir cevap. Tüm bu bilgileri derlemeye zaman ayırdığınız için teşekkür ederiz.
Tigran

5
C ++ 'dan gelmez, çünkü C ++' da dil ve standart kitaplık kullanımları için bir alt çizgiyle başlayan tanımlayıcıları ayırır.
Rob G

7
Performans açısından kritik, çok iş parçacıklı, sistem düzeyinde kod ve diğer kodlar arasında neden ayrım yapıyorsunuz? Kodum _camelCaseperformans açısından kritik / sistem düzeyinde kodsa , kullanmak bana nasıl yardımcı olacak?
BornToCode

6
Alt çizgi kullanmanın performansı kritik, çok iş parçacıklı veya sistem düzeyinde kod yazma ile hiçbir ilgisi yoktur. Önemli olan tutarlılıktır ve CoreFX ekibi sadece belirli bir kongre üzerinde anlaşmaya varmış bir ekiptir. Bu, isimlendirme kurallarını karşılaştıran çok güzel bir analizle desteklenen harika bir cevap, ancak "alt çizgiler daha iyi çünkü CoreFX takımı öyle söylüyor" diyen ek bölümün kalitesini gerçekten düşürdüğüne inanıyorum.
Şafak Gür

5
Benim sorunum, mantıksal çıkarımı anlamam. en.wikipedia.org/wiki/Inference Ama hey, bunun herkes için olmadığını anladım.
user603563

67

Microsoft StyleCop Yardım dosyasından alınmıştır:

TypeName: FieldNamesMustNotBeginWithUnderscore

Kontrol Kimliği: SA1309

Neden: C # 'daki alan adı bir alt çizgiyle başlar.

Kural Açıklaması:

Bu kuralın ihlali, bir alan adı alt çizgiyle başladığında ortaya çıkar.

StyleCop varsayılan olarak yerel sınıf alanlarını işaretlemek için alt çizgi, m_, vb. Kullanılmasına 'bu' lehine izin vermez. önek. "Bunu" kullanmanın avantajı. kodu görüntülemek için hangi düzenleyicinin kullanıldığına bakılmaksızın, sınıf üyelerine yapılan tüm çağrıları anında tanınabilir hale getirerek, yöntemler, özellikler vb. dahil olmak üzere tüm öğe türlerine eşit şekilde uygulanmasıdır. Diğer bir avantajı, örnek üyeleri ile statik üyeler arasında önek eklenmeyecek hızlı, tanınabilir bir farklılaşma oluşturmasıdır.

Alan veya değişken adının Win32 veya COM ile ilişkili bir öğenin adıyla eşleşmesi amaçlanıyorsa ve bu nedenle bir alt çizgiyle başlaması gerekiyorsa, alanı veya değişkeni özel bir NativeMethods sınıfına yerleştirin. Bir NativeMethods sınıfı, NativeMethods ile biten bir adı içeren herhangi bir sınıftır ve Win32 veya COM sarmalayıcıları için bir yer tutucu olarak tasarlanmıştır. Öğe bir NativeMethods sınıfına yerleştirilirse StyleCop bu ihlali yok sayar.

Farklı bir kural açıklaması, yukarıdakilere ek olarak tercih edilen uygulamanın özel alanları küçük harflerle ve genel alanları büyük harflerle başlatmak olduğunu belirtir.

Düzenleme: Bir takip olarak, StyleCop'un proje sayfası burada bulunur: https://github.com/DotNetAnalyzers/StyleCopAnalyzers . Yardım dosyasını okumak, neden çeşitli stil kuralları önerdiklerine dair birçok fikir verir.


7
Çoğunlukla "en iyi uygulamalar" türü bir şeydir. Başka bir şeyle önek ederken "Bu" herhangi statik olmayan üye uygulanabilir ile önek kural devletler olarak verebilir dil sözdizimi kuralları için geçerli nedeniyle olmayabilir. "Bu" anahtar sözcüğü, amaçlanan hedefi önemsiz bir şekilde netleştirir.
Scott Dorman

5
Ayrıca dilin soruna yönelik amaçlanan çözümünü ("bu"), sorunu aşmanın yapay yollarına tercih ediyorum.
galaktor

10
Aynı yazılımda, yalnızca durumda farklı olan iki alanın olmaması gerektiğini söyleyen bir kural da vardır. Peki, bir kamu mülkü tarafından sarılmış korumalı bir değişkenle ne yaparsınız?
Lilith River

5
'Alt çizgi yok' meselesiyle ilgili tek sorunum, bir (web) Form veya benzeri bir formda programlama yaparken, sadece 'bu' kullanmanın, tanımladığım özel alanları filtrelememe hiçbir şekilde yardımcı olmaması ve bunun yerine bana söz konusu nesneye dahil olan sekiz milyon diğer mülkün devasa bir listesi.

14
StyleCop, thisherhangi bir sınıf üyesine atıfta bulunurken sürekli kullanırsam , tüm sınıf üyelerine yapılan tüm çağrıları sadece arayarak bulabileceğimi söylüyor gibi görünüyor this. Bununla tartışamam ama bunu yapmam gereken bir zaman da düşünemiyorum. Yapmak istediğim en son şey, kodlamaya sıkıcılık katmak ve neredeyse hiçbir pratik kazanç elde etmeden kodumu this( neredeyse Macarca olan) çöpe atmak . Gerçek şu ki, bir kod satırına bakıyorsam, büyük harfle veya alt çizgiyle başlayan herhangi bir şey sınıf üyesidir, küçük harf ise yereldir.
devuxer

27

Özel bir alandan bahsettiğimiz için, sınıfınızın bir kullanıcısını etkilemez.

Ancak özel alan için bir alt çizgi kullanmanızı tavsiye ederim çünkü kodun anlaşılmasını kolaylaştırabilir, örneğin:

private int foo;
public void SetFoo(int foo)
{
  // you have to prefix the private field with "this."
  this.foo = foo;

  // imagine there's lots of code here,
  // so you can't see the method signature



  // when reading the following code, you can't be sure what foo is
  // is it a private field, or a method-argument (or a local variable)??
  if (foo == x)
  {
    ..
  }
}

Ekibimizde, özel alanlar için her zaman bir alt çizgi öneki kullanırız. Böylelikle bazı kodları okurken, özel alanları çok kolay bir şekilde belirleyebilir ve bunları yereller ve argümanlardan ayırabilirim. Bir bakıma, alt çizgi "bu" nun kısaltılmış hali olarak görülebilir.


14
Eh ben hep önek ile 'bu' olursa olsun saha, özellik veya yöntem accssing ediyorsam.
TheCodeJunkie

9
Benim için alt çizgi "bu" nun bir tür kısaltmasıdır.
M4N

2
R # 'da tavsiye, foo parametresini çağırmamaktır. Foo Ayarlamak için kullanılacağını bildiğiniz için neden ona 'değer' demiyorsunuz?
Thinkbeforecoding

17
@Martin: "Bu" için bir kısaltma olarak alt çizgi ile ilgili sorun, "this" olabilirken tüm sınıf üyelerine uygulanamayacağıdır. Kodun "this" anahtar kelimesi ile çok daha kolay / daha temiz okunduğunu düşünüyorum. Örneğinizde, if (foo == x) her zaman foo parametresine başvuracaktır.
Scott Dorman

3
@TheCodeJunkie: Bu, kod tabanınızda bir sürü gereksiz karakterdir.
Ed S.

15

O zamandan beri çok spesifik ve çok anlamsız stil kuralları olan bir ortamda çalıştıktan sonra kendi tarzımı yaratmaya başladım. Bu, çok fazla ileri geri attığım bir tür. Sonunda, özel alanların her zaman _field olacağına, yerel değişkenlerin hiçbir zaman _ olmayacağına ve küçük harf olacağına, kontroller için değişken adlarının Macar gösterimini gevşek bir şekilde takip edeceğine ve parametreler genellikle camelCase olacağına karar verdim.

this.Anahtar kelimeden nefret ediyorum , bence çok fazla kod gürültüsü ekliyor. Resharper'ın bunu gereksiz yere kaldırmasını seviyorum. Anahtar kelime.

6 yıllık güncelleme:Dictionary<TKey,T> Eşzamanlı erişimin belirli bir kullanımı için dahili özelliklerini analiz ediyordum ve özel bir alanı yerel bir değişken olarak yanlış okudum. Özel alanlar kesinlikle yerel değişkenlerle aynı adlandırma kuralı olmamalıdır. Bir alt çizgi olsaydı, inanılmaz derecede açık olurdu.


18
thisKelime geçerli nesne için garantili bir başvurudur. Bunu bir alt çizgi ile anlamazsınız. Tiksinmeye gerek yok this.
Jason S

15
Neden bir 'standart' icat ettin? 'bu.' size nesnenin bir örnek değişkeni 'Class' olduğunu söyler. bunun bir sınıf değişkeni olduğunu söyler. Diğer her şey bir yığın değişkenidir. Alt çizgi, Macar Notasyonu'nun şu anda ayrıştığı aynı kötü fikirler yığınına aittir.
Quarkly

4
@ DRAirey1 bunu kaçırmak çok kolay. ihtiyaç duyduğunuzda ve sonunda devletle tuhaf şeyler yaparsınız.
Chris Marisic

3
@ChrisMarisic Elbette kullanımıyla ilgili fikrinize hoş geldiniz _, ancak açıkça olmadığı halde bunu yerleşik standart olarak kabul etmeyin.
ezmek

3
"Kendi tarzımı yaratmaya devam ettim" de seni kaybettim.
rory.ap

12

Alt çizgiyi beğendim, çünkü o zaman küçük harfli adı aşağıdaki gibi yöntem parametreleri olarak kullanabilirim:

public class Person
{
    string _firstName;

    public MyClass(string firstName)
    {
        _firstName = firstName;
    }

    public string FirstName
    {
        get { return _firstName; }
    }
}

39
public string FirstName {get; özel küme; }
jason

3
thisAnahtar kelimeyi kullanarak yöntem parametresi olarak küçük harf kullanmaya devam edebilirsiniz . Bunu devam eden ve daima tartışmalı bir nokta haline getirmek "altını çizmek ya da etmemek":public MyClass(string firstName){ this.firstName = firstName; }
mateuscb

5
Gelecek, şimdi sadece public string FirstName { get; }ve pasör inşaatçıda hala mevcut
Chris Marisic

Bu örnekte. thisyalnızca kurucuda gerekli olacaktır. Başka bir yerde kullanmaya gerek yok. Yani firstNamealan adı çok iyi çalışır gibi.
Thomas Eyde

9

Martin'in bahsettiği nedenle özel alanların önünde alt çizgi kullanmayı gerçekten seviyorum ve ayrıca özel alanlar daha sonra IntelliSense'te birlikte sıralanacak. Bu, genel olarak Macar önek gösterimlerinin kötülüğüne rağmen.

Bununla birlikte, son zamanlarda özel üyeler için alt çizgi önekini kullanmanın nedenini tam olarak bilmesem de hoş karşılanmadığını görüyorum. Belki başkası biliyordur? Bu sadece önek prensibi mi? Yoksa, derlenmiş derlemelerde alt çizgileri olan jenerik türlerin adlarının karıştırılmasıyla ilgili bir şey var mıydı?


4
Benim için _, kodu hızlı bir şekilde tararken _words'ü karıştırır, daha az okumaktan _ve _hery _'de durup onu kabul etmek ve _sort'un bir kontrol karakteri olmadığını _ fark etmek gibi. Ayrıca alan adlarındaki ilk kullanışlı karakteri bir sütun sağa doğru iterek girintiyi bozar. Genelde C ++ 'dan hoşlanmıyorum çünkü çoğu C ++ - programcı inanılmaz derecede kısa ve yavaş okunan sembol / makine benzeri kod yazma eğilimindedir ve ben bunun C # kodunda olmamasını tercih ederim :)
Oskar Duveborn

23
Benim için bu. Bu, kod içinde hızlı bir şekilde tarandığında, bu kelimeleri karıştırır, sadece bunu okumaktan daha az olur. ve bu. dahası, durmak zorunda gibi ve bu. her şey. bunu kabul etmek ve bu. bunun bunun farkına varmak. bunun bazılarının kontrol karakteri değil. Ara sıra bulmayı _fieldFooveya _fieldBarkullanımımın this.fieldFooveya ile karışık olmasını tercih ederim this.fieldBar. this.Öneki, baştaki alt çizgiden çok daha sarsıcı buluyorum .
AggieEric

Belki de deneyimdeki bu tutarsızlığın, bazı kullanıcıları alt çizgileri boşluk olarak görmeye ve dolayısıyla okumalarının dikkatini dağıtmayacak şekilde eğiten boşluklara izin verilmeyen eski okul dosya sistemlerinden veya dosya aktarım protokollerinden kaynaklanıyor olabileceğini düşünüyordum. Öte yandan bende, başından beri kendi dosya
isimlerimde

1
@AggieEric oradaki çiviyi vurdu. Sadece cümlesini okumak bile başımı ağrıtıyor! Yıllarca bu konuda MS tavsiyesine sadık kalmaya çalıştım ve thisher yerde küçük mavi kelimeleri okurken o kadar SICK oldum ki , tam orada ineklerin öfkeli bir kararını verdim. Şimdi, thisYALNIZCA mülkiyet referansları için veya thisve arasında açıkça ayrım yapmam gerektiğinde, dini olarak kullanıyorum base. Her biri kendi, sanırım :-)
Riegardt Steyn

1
Sanırım bunun sebebi nihayetinde herhangi bir şeye bir noktalama karakteriyle başlamak okunabilirliğe zarar veriyor. Herkesi rahatsız ediyor gibi görünmüyor ama bana göre noktalama işaretiyle başlayan herhangi bir şeyi okumak çok doğal değil. Kod ne kadar İngilizceye benziyorsa, onu okumayı o kadar kolay buluyorum. Ve modern IDE'lerle yerel halk ve özel üyeler arasındaki farkı söylemek artık çok kolay çünkü büyük olasılıkla farklı renklerde olacaklar.
Tim Long

5

Style Cop önerisi olsun ya da olmasın, .NET Framework'e bakıldığında üye değişkenleri için çok sayıda "_" kullanımı görülür. Style Cop yaratıcılarının önerdiği şey, MS çalışanlarının çoğunluğunun kullandığı şey değil. :) Bu yüzden alt çizgiye bağlı kalacağım. Kişisel olarak alt çizgiyi kullanarak bundan çok daha az hata yaptığım için (örnek: this.varName = varName yerine varName = varName kullanmak, gerçekten içimde kaldı)


3
Alt çizgi, .NET çekirdek stil kılavuzu için de önerilir: github.com/dotnet/corefx/wiki/Coding-style
landoncz

3

Bence sınıf düzeyindeki alanların büyük ölçüde dilin tasarımında bir hata olduğunu düşünüyorum. C # 'ın özelliklerinin kendi yerel kapsamları olsaydı bunu tercih ederdim:

public int Foo
{
   private int foo;
   get
   {
      return foo;
   }
   set
   {
      foo = value;
   }
}

Bu, alanları tamamen kullanmayı bırakmayı mümkün kılar.

Özel bir alanın önüne alt çizgi koyduğum tek zaman, bir özelliğin ayrı bir destek alanı gerektirdiği zamandır. Bu aynı zamanda özel alanları kullandığım tek zamandır . (Ve korumalı, dahili veya genel alanları asla kullanmadığım için, alanları dönemini kullandığım tek zaman budur.) Bana kalırsa, bir değişkenin sınıf kapsamına sahip olması gerekiyorsa, bu sınıfın bir özelliğidir.


Görünüşe göre C # çetesi, yeni bir özel int foo {get; set;} sözdizimi şekeri.
Dana

Tabiiki; burada anlattığım şey bu olmadan tamamen işe yaramaz.
Robert Rossney

Açıkladığınız şey "Otomatik uygulanan özellikler" dir. Ne yazık ki, Visual Basic.NET ile, bu aslında perde arkasında "gizli" bir _prefix değişkeni kullanır, yani otomatik olarak uygulanan bir "Public Property Foo As Integer" özelliğiniz varsa, bu durumda üye değişken bildirimine "Private _foo olarak sahip OLAMAZSINIZ" Tamsayı "

Hayır, en azından benim örneğimde otomatik olarak uygulanan özellikleri açıklamıyorum. C # veya VB'de bulunmayan bir kapsam belirleme düzeyini açıklıyorum. VB'nin destek alanlarının adlarını işlemek için bu kadar önemsiz bir yol seçmesi gerçekten talihsiz bir durum. C # 'ler, aynı isimde bir değişkeni kazara yaratmayacağınız kadar çirkin.
Robert Rossney

3

Özel alanlar için _fieldName gösterimini kırmak çok kolaydır . Bunu kullanarak." notasyonu kırmak imkansızdır. _ Notasyonunu nasıl kırarsınız? Gözlemek:

private void MyMethod()
{
  int _myInt = 1; 
  return; 
}

İşte böyle, ben sadece adlandırma kuralınızı ihlal ettim ama derleniyor. A) Macarca olmayan ve b) açık bir adlandırma kuralına sahip olmayı tercih ederim. Macarca isimlendirmeyi ortadan kaldırmaktan yanayım ve bu bir şekilde nitelendiriyor. Değişken adının önündeki bir nesnenin türü yerine, onun erişim düzeyine sahipsiniz.

Bunu, değişkenin @my_numberadının adı kapsama bağladığı ve kırılamaz olduğu Ruby ile karşılaştırın .

düzenleme: Bu cevap olumsuz oldu. Umrumda değil, kalıyor.


11
Geliştiricilerin buna uymamasının mümkün olduğunu söylemek, bir adlandırma kuralının geçerli bir eleştirisi değildir.
Robert Rossney

8
Vay canına, sizin "kırılması kolay" tanımınız ve benimki tamamen zıtlar gibi. Sizinki "kasıtlı olarak kırılması kolay" anlamına gelirken, diğer çoğu insan muhtemelen " kazara kırılması kolay" anlamına gelir . Okunabilir kod yazarken hangisinin daha uygun olduğunu bulmak için bunu okuyucuya bir alıştırma olarak bırakacağım…
Konrad Rudolph

6
@Konrad: "Okuyucu için bir egzersiz olarak" dediğinizde iddialı görünüyorsunuz. Bu bir matematik ders kitabı değil.
jcollum

3
Şimdi biraz daha az olumsuz :) Akıntıya karşı kürek çekiyor olsak da, alt çizgi kuralından da hoşlanmıyorum. Benim görüşüme göre, Macar notasyonundan farklı değil ve dürüst olmak gerekirse, gözlerimi kanıyor (okunabilirliği bozuyor). Macar Notasyonunu C # ile attık ve artık IDE'nize güvenmemenin bu son kalıntısını çıkarmanın zamanı geldi.
Tim Long

1
MS'in aslında alt çizginin C # stil kılavuzunda kullanılmayacağını söylediğini duydum. blogs.msdn.microsoft.com/brada/2005/01/26/… - bölüm 2.6 - Brad Abrams en azından bizimle aynı fikirde görünüyor!
jcollum

1

Derlemenizin CLS uyumlu olmasını istediğinizde, assemblyinfo dosyanızda CLSCompliant özniteliğini kullanabilirsiniz. Derleyici, kodunuz cls uyumlu olmayan şeyler içerdiğinde şikayet eder.

Daha sonra, yalnızca duruma göre farklılık gösteren 2 özelliğiniz olduğunda, derleyici bir hata verecektir. Öte yandan aynı sınıfta özel bir alanınız ve bir kamu mülkünüz olduğunda herhangi bir sorun olmayacaktır.

(Ancak, özel üyelerimin önüne her zaman bir alt çizgi koyarım. Ayrıca kodumu okuduğumda belirli bir değişkenin üye alanı olduğunu netleştirmeme yardımcı olur).


0

Özel alanlarımın önünde alt çizgi kullanmayı iki nedenden dolayı seviyorum. Birinden daha önce bahsedilmişti, alanlar kodda ve Intellisense'de ilişkili özelliklerinden ayrılır. İkinci neden, ister VB ister C # kodluyor olsam da aynı adlandırma kurallarını kullanabilmemdir.


1
whoah, bu akıllıca mı? VB'de alt çizgi 'sonraki satırda devam ediyor' anlamına gelmiyor mu?
JBRWilkinson

1
Yalnızca alt çizgiden sonra bir boşluk varsa.
Rob Windsor

İlk harfin küçük veya büyük olması benim için iyi görünüyor :)
ManoDestra

0

Herhangi bir çıkarım yok. Kodunuz derlendiğinde, derleyici için önemli olan tek şey alanın / mülkün ad alanı ve görünürlüğüdür. Bir tanımlayıcıyı adlandırırken alt çizgi, diğer herhangi bir karakter kadar önemlidir. Gerçek numara, sizin ve çevrenizdeki insanların anlayacağı bir kongre kullanmaktır.

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.