2012-02-24 15 views
6

Bu, sadece semantik aracılığıyla çalışıyorum uygun kodlama uygulaması üzerinde bir soru değildir. C#: isteğe bağlı parametreler ve adlandırılmış argümanlar ile kurucuları aşırı yükleme?

public FooClass(string name = "theFoo") 
{ fooName = name; } 

public FooClass(string name, int num = 7, bool boo = true) : this(name) 
{ fooNum = num; fooBool = boo; } 

Olamadığınızda isimli değişkenler kullanmak mümkündür ... Ben şu Kurucular söylüyorlar sağlar ...? Ben sadece bağımsız değişken olmadan (bool, dize int) yapıcısı FooClass dinlenme

özen veya aramaya opsiyonlarında güvenerek bir adlandırılmış argüman geçiyorum

FooClass foo1 = new FooClass(num:1); 

//? içinde ... adlandırılmış ve isteğe bağlı argümanlar

FooClass foo2 = new FooClass(); 
+7

ne dersiniz denemek? Kodun tam orada var ... işe yarayıp yaramadığını söyle! –

+0

tamam, örnek kodun çalışmadığını ve nasıl çalışacağını bilmek istediğimi belirtmeliydim. – user1229895

cevap

5

Kullanımı aşağıdaki şekillerde aşırı yük çözünürlüğünü etkiler olarak:

  • bir yöntem, dizin veya yapıcı yürütülmesi için aday olan parametrelerinin her eğer isteğe bağlı olarak ya da arama tablosu tek bir argüman, adı veya konumu ile, karşılık gelen ve bu bağımsız değişken parametrenin türüne dönüştürülür halinde olabilir. Birden fazla aday bulunursa

  • , tercih dönüşümler için aşırı yük çözünürlük kuralları açıkça belirtilen argümanları uygulanır. İsteğe bağlı parametreler için ihmal edilen argümanlar göz ardı edilir. İki adayın eşit derecede iyi olduğu yargılanırsa, tercih, aramada argümanların ihmal edildiği isteğe bağlı parametrelere sahip olmayan bir adaya gitmektedir. Bu, daha az parametresi olan adaylar için aşırı yük kararında genel bir tercihin bir sonucudur.

http://msdn.microsoft.com/en-us/library/dd264739.aspx

+0

Anladığım kadarıyla, imzaları karşılaştırıyor, ancak çalışmam için örnek kodumu yeniden yazabilir misiniz? – user1229895

+0

Nasıl "çalışmıyor?" Yanlış aşırı yüklenme mi diyor? Bir istisna atar mı? –

+0

üzgün ... çok yakında girilen böylece ilk durum için, açıkça ... çağrılan az imza sonuçlanan tüm opsiyoneller yok sayılır bir argümanı, belirtmeden ve FooClass ile aşırı yük çağırarak ikinci durumda(), bu mümkün değil... Bu nedenle, yanıtı atlanmış isteğe bağlı argümanlarla adlandırmak mümkün değil mi? – user1229895

0

isteğe bağlı parametreler gerekli parametreleri sonra parametre listesinin sonuna tanımlanır. Arayan, isteğe bağlı parametrelerin ardışık herhangi biri için bir argüman sağlarsa, önceki tüm isteğe bağlı parametreler için argümanlar sağlamalıdır. Bağımsız değişken listesindeki virgülle ayrılmış boşluklar desteklenmez. burada gösterildiği gibi aynı zamanda

,

bir adlandırılmış argüman, pozisyonel argümanları takip edebilirsiniz. HesaplaBMI (123, yükseklik: 64); Ancak, konumsal argüman adlandırılmış argüman takip edemez. Aşağıdaki ifade, bir derleyici hatasına neden olur. // CalculateBMI (ağırlık: 123, 64);

İlgili konular