SORU
9 ŞUBAT 2011, ÇARŞAMBA


Alıcılar, belirleyiciler ve özellikleri en iyi uygulamalar. Java vs C#

C alıyorum# sınıf şu an ve bir şeyler yapmanın en iyi yolu bulmaya çalışıyorum. Bir Java arka plan geldiğim ve sadece Java ile en iyi uygulamaları biliyorum; o yüzden ben# acemi!

Eğer özel bir özellik varsa Java, yapıyoruz;

private String name;

public void setName(String name) {
   this.name = name;
}

public String getName() {
   return this.name;
}

C#, bunu yapmanın pek çok yolu olduğunu göreceksiniz.

Java gibi yapabilirim:

private string name;

public void setName(string name) {
   this.name = name;
}

public string getName() {
   return this.name;
}

Ya da bu şekilde yapabilirim:

private string name;

public string Name {
   get { return name; }
   set { name = value; }
}

Ya da:

public string Name { get; set; }

Hangisi, ve uyarılar veya inceliklerini her yaklaşımı ile ilişkisi nedir? kullanmalıyım Sınıfları oluştururken, Java (Java özellikle Etkili okuma) biliyorum bu genel en iyi uygulamaları takip ediyorum. Yani, örneğin, değişmezliğini tanıdı (sadece gerekli belirleyiciler koşuluyla) tercih ediyorum. Merak ettim nasıl bu uygulamaların uyması çeşitli yollar sağlayan belirleyiciler ve alıcılar C#; aslında, ben nereden bileyim tercüme en iyi uygulamaları Java dünyasına C#?

EDİT

Jon Skeet cevabı yorum olarak bu yazıyı duruyordum ama uzun oldu:

Ne önemsiz olmayan bir özellik (önemli işleme ve doğrulama belki yani)? Hala mantığı get set kapsüllenmiş ile ortak bir özellik) ama bunu açığa alabilir miyim? Neden ben alıcı ve ayarlayıcı yöntemleri (ilgili işleme ve doğrulama mantığı ile) adanmış olan bu yapardı.

CEVAP
9 ŞUBAT 2011, ÇARŞAMBA


-Ön C# 6

Bu son, önemsiz bir özelliği için kullanmak istiyorum. Bu bir çağrı aldımkamuhem alıcılar ve belirleyiciler gibi ortak özelliği vardır.

Değişmezliğini tanıdı otomatik olarak uygulanan özelliklere sahip bir ağrı biraz - sadece alıcı olan otomatik bir özellik yazamazsın; elinden gelen en

public string Foo { get; private set; }

hangi değilgerçektendeğişmez... sizin sınıf dışında değişmez. Bir kullanmak isteyebilirsinizgerçeksalt okunur yerine: özellik

private readonly string foo;
public string Foo { get { return foo; } }

Kesinlikle getName() setName() yazmak istemiyorum.bazımantıklı yazmak için yapar durumda, özellikle eğer pahalı olabilir eğer özelliklerini kullanmak yerine Get/Set yöntemleri, ve bunu vurgulamak istiyoruz. Ancak, takip etmek istersin .NET yöntemleri için PascalCase bu adlandırma, ve bu gibi önemsiz bir özellik normal yöntemlerle neyse uygulanacak istemem - bir özelliği daha deyimsel burada.

C# 6

Yaşasın, sonunda salt okunur otomatik olarak uygulanan uygun özelliklere sahiptir:

// This can only be assigned to within the constructor
public string Foo { get; }

Aynı şekilde için salt okunur olan özellikleriyapınbazı işler yapmak gerekiyor, kullanabilirsiniz üye gövdeli özellikleri:

public double Area => height * width;

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Breno Rises

    Breno Rises

    7 Ocak 2014
  • taliajoy18

    taliajoy18

    12 Temmuz 2011
  • Tracy Hairston

    Tracy Hairst

    22 Mayıs 2009