2013-04-16 24 views
7

Làm cách nào để khai báo tham số màu tùy chọn trong một số hàm hoặc phụ, như thể tôi làm điều đó theo cách thông thường (ý tôi là cung cấp một số màu mặc định cho tham số tùy chọn đó) khi trình biên dịch vb.net phàn nàn rằng có một số lỗi trong mã đó. Làm cách nào để giải quyết vấn đề này. Mẫu mã bên dưới:Sử dụng màu như tham số tùy chọn Trong một hàm trong một lớp

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

     End Function 

Trình biên dịch không chấp nhận '= Color.Black'

Trả lời

15

MSDN nói về Optional Parameters cho Visual Basic

Đối với mỗi tham số tùy chọn, bạn phải chỉ định một hằng số biểu thức là giá trị mặc định của thông số đó. Nếu biểu thức đánh giá là Không có gì, giá trị mặc định của loại dữ liệu giá trị được sử dụng làm giá trị mặc định của tham số .

Vì vậy, bạn không thể sử dụng cú pháp đó, thay vào đó bạn có thể viết một cái gì đó như thế này

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 

Cùng mã viết bằng C# như sau

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

Trong C# bạn không thể kiểm tra một loại Giá trị (như Màu sắc, Điểm, Kích thước, ...) đối với giá trị null. Các kiểu này không bao giờ rỗng, nhưng chúng có giá trị mặc định cho kiểu- (Giống như 0 cho số nguyên), vì vậy, nếu bạn cần chuyển một tham số tùy chọn cho một kiểu giá trị, bạn có thể tạo nó với từ khóa new. thích sử dụng làm mặc định hoặc sử dụng default keyword và để khung công tác quyết định giá trị nào là mặc định cho loại đó. Nếu bạn để khung này chọn thì thuộc tính IsEmpty sẽ là đúng.

+0

Đó là lạ rằng trong C# trình biên dịch sẽ không cho phép tôi tuyên bố "Màu c = null" khi tuyên bố tham số. Nó phàn nàn về việc không thể gán null cho kiểu giá trị. Tôi phải nói "Color c = new Color()" và sau đó trong bài kiểm tra mã của tôi cho "c.IsEmpty". –

+1

@BillGregg đã thêm phiên bản C# – Steve

5

Bạn có thể quá tải phương pháp

''' <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 
Các vấn đề liên quan