2010-12-15 13 views
15

İşte bir örnek fonksiyon: C# 4.0'da varsayılan bir Renk parametresi belirtebilir miyim?

public void DrawSquare(int x, int y, Color boxColor = Color.Black) 
{ 
    //Code to draw the square goes here 
} 

Derleyici bana hatayı vermeye devam ediyor: Default parameter value for 'boxColor'must be a compile-time constant

Color.Black, 
Color.FromKnownColor(KnownColor.Black), and 
Color.FromArgb(0, 0, 0) 

denedim. Color.Black'i varsayılan renk nasıl yapabilirim? Ayrıca, bunu belirtmek için bir Black dizgisi kullanmak istemiyorum (ki bunu biliyordum). Xzx23 değerini istiyorum.

cevap

11

Color.Black statik değil, sabittir, yani, bunu yapamazsınız.

Varsayılan olarak kullanmak için null (null) (Color?) parametresini yapabilir ve boşsa, Black (Siyah) olarak ayarlayabilirsiniz.

+0

Cevabımda bu vardı, ancak boş bir argüman belirtecekseniz, neden sadece Color.Black belirtmiyorsunuz? :) –

+0

@George: "Color.Black sabit değil, sabittir". – Vlad

+0

Renk bir yapıdır, bu nedenle Nullable türünü (veya kısaca C# Color?) Kullanacak olursanız, boş olabilir. –

11

yapın:

basit tutarak nesi var
void foo(... Color boxColor = default(Color)) 
{ 
    if(object.Equals(boxColor, default(Color))) boxColor = Color.Black; 

    // ... 
} 
+0

neden sadece '' (boxColor == default (Color)) '? – Vlad

+0

Fark yaratmıyor. Eşitlik gösterimini tercih ederim, ancak değer türleriyle, '==' aynıdır. –

+0

@Mr. TA: iyi, bu durumda 'object.Equals' yerine' Color.Equals' kullanmak daha iyi olabilirdi. Veya daha iyi 'varsayılan (Renk) .Equals (boxColor)', böylece sanal işlevi kullanırsınız. Benim düşünceme göre, '==' daha okunabilir, ama kişisel bir zevk meselesi. – Vlad

9

?

public void DrawSquare(int x, int y) 
{ 
    DrawSquare(x,y,Color.Black); 
} 

public void DrawSquare(int x, int y, Color color) 
{ 
    // Do your thing. 
} 
+1

Asıl işlev bu kadar basit değil. Yaklaşık 10 parametreye sahiptir (çoğu isteğe bağlıdır ve isteğe bağlı olarak belirtilebilir). Ayrıca bu parametrelerle 5 ve 6 farklı fonksiyon vardır ve her fonksiyonun iki varyasyonu vardır. Yukarıdaki yapmak için çok fazla işlev ekleyecektir. Yine de öneri için teşekkür ederim. –

İlgili konular