2013-04-16 13 views
7

Jak można zadeklarować opcjonalny parametr koloru w niektórych funkcjach lub podrzędnych, tak jak robię to w normalny sposób (mam na myśli podać domyślny kolor dla tego opcjonalnego parametru) jak kompilator vb.net narzeka, że ​​jest jakiś błąd w tym kodzie. Jak rozwiązać ten problem. Przykładowy kod poniżej:Używanie koloru jako opcjonalnego Parametr W funkcji w klasie

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

     End Function 

Kompilator nie akceptuje '= Color.Black'

Odpowiedz

15

MSDN mówi o Optional Parameters dla Visual Basic

Dla każdego parametru opcjonalnego, należy określić Stałe wyrażenie jako domyślna wartość tego parametru. Jeśli wyrażenie ma wartość Nic, domyślna wartość typu danych wartości jest używana jako domyślna wartość parametru.

Nie można więc używać tej składni, a nie można napisać coś takiego

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 

tego samego kodu napisanego w C# jest następujący

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

W języku C# nie można testować typ wartości (np. kolor, punkt, wielkość itp.) względem wartości pustej. Te typy nigdy nie są puste, ale mają domyślną wartość dla typu- (jak 0 dla liczb całkowitych), więc jeśli musisz przekazać opcjonalny parametr dla typu wartości, możesz utworzyć go za pomocą słowa kluczowego new z wartościami, które jak używać jako domyślnego lub używać default keyword i niech framework decyduje, która wartość jest domyślna dla typu. Jeśli pozwolisz ramom wybrać, wówczas właściwość IsEmpty będzie prawdziwa.

+0

To dziwne, że w C# kompilator nie pozwoli mi zadeklarować „Color c = null” podczas deklarowania parametru. Skarżyło się, że nie może przydzielić wartości null dla typu wartości. Musiałem powiedzieć "Kolor c = nowy kolor()", a następnie w moim teście kodu dla "c.IsEmpty". –

+1

@BillGregg dodał wersję C# – Steve

5

Można przeciążać metoda

''' <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 
Powiązane problemy