2013-04-16 23 views
7

sınıfındaki bir işlevde Bazı işlevlerde veya altta isteğe bağlı bir renk parametresini, normal şekilde yaptığım gibi (isteğe bağlı parametre için varsayılan renk vermek istiyorum) nasıl ekleyebilirim? vb.net derleyici olarak bu kodda bazı hata olduğunu şikayet ediyor. Bu sorunu nasıl çözebilirim? Aşağıda Örnek kod:İsteğe Bağlı Parametre Olarak Renk Kullanma

Public Shared Function SomeFunction(ByVal iParam As Integer, Optional ByVal oColor As Color = Color.Black) 

     End Function 

derleyici '= Color.Black'

cevap

15

MSDN her opsiyonel parametre için yaklaşık Optional Parameters Visual Basic

diyor kabul etmiyor, bir belirtmelisiniz ifadesini olarak, bu parametrenin varsayılan değeri olarak sabitleyin. İfade olarak değerlendirilmezse, değer veri türünün varsayılan değeri, parametrenin varsayılan değeri olarak kullanılır.

Yani onun yerine C# ile yazılmış bu

Private Sub Test(a As Integer, Optional c As Color = Nothing) 
    If c = Nothing Then 
     c = Color.Black ' your default color' 
    End If 
    ...... 
End Sub 

aynı kod gibi bir şey yazabilirim o sözdizimi kullanamaz Test edemeyeceğiniz C# aşağıdaki

private void Test(int a, Color c = default(Color)) 
{ 
    if (c.IsEmpty) 
     c = Color.Black; 
} 

olduğunu boş değerlere karşı bir Değer tipi (Renk, Nokta, Boyut vb. gibi). Bu türler hiçbir zaman boş değildir, ancak türler için varsayılan bir değer vardır (Tamsayılar için 0 gibi), bu nedenle, bir değer türü için isteğe bağlı bir parametre iletmeniz gerekiyorsa, new anahtar kelimesiyle istediğiniz değerleri elde edebilirsiniz varsayılan olarak kullanmak ister veya default keyword kullanın ve çerçevenin hangi değerin tür için varsayılan değer olduğuna karar vermesine izin verin. Çerçevenin seçmesine izin verirseniz, IsEmpty özelliği doğru olacaktır.

+0

O C# derleyici parametresini bildirirken bana "Renk c = null" ilan izin vermez tuhaf. Değer türüne null atamadığı için şikayetçi oldu. "Renk c = yeni Renk()" ve daha sonra "c.IsEmpty" için kod testimde vardı. –

+1

@BillGregg, C# sürümünü ekledi – Steve

5

Sen yöntemini aşılmasına neden olabilir

''' <summary> 
''' requires two parameters 
''' </summary> 
''' <param name="a">an integer</param> 
''' <param name="c">a color</param> 
''' <remarks></remarks> 
Private Sub Test(a As Integer, c As Color) 
    'Your function 
End Sub 

''' <summary> 
''' one parameter, uses default color of black 
''' </summary> 
''' <param name="a">an integer</param> 
''' <remarks></remarks> 
Private Sub Test(a As Integer) 
    Test(a, Color.Black) 
End Sub 
İlgili konular