2013-04-16 9 views
7

के भीतर एक फ़ंक्शन में मैं कुछ फ़ंक्शन या उप में वैकल्पिक रंग पैरामीटर कैसे घोषित कर सकता हूं, जैसे कि मैं इसे सामान्य तरीके से करता हूं (मेरा मतलब है कि उस वैकल्पिक पैरामीटर के लिए कुछ डिफ़ॉल्ट रंग देना) क्योंकि vb.net संकलक शिकायत करता है कि उस कोड में कुछ त्रुटि है। मैं इस समस्या को कैसे हल कर सकता हूं। नीचे नमूना कोड:वैकल्पिक पैरामीटर के रूप में रंग का उपयोग कक्षा

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

     End Function 

संकलक स्वीकार नहीं करता है '= Color.Black'

उत्तर

15

MSDN के बारे में Optional Parameters विजुअल बेसिक

के लिए कहते हैं प्रत्येक वैकल्पिक पैरामीटर के लिए, आप एक निर्दिष्ट करना होगा स्थिर के रूप में अभिव्यक्ति उस पैरामीटर का डिफ़ॉल्ट मान। यदि अभिव्यक्ति पर कुछ भी मूल्यांकन नहीं करती है, तो मान डेटा प्रकार का डिफ़ॉल्ट मान पैरामीटर के डिफ़ॉल्ट मान के रूप में उपयोग किया जाता है।

तो आपको लगता है कि सिंटैक्स का उपयोग नहीं कर सकते हैं, इसके बजाय आप इस

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 

एक ही कोड सी # में लिखा की तरह कुछ लिख सकता है निम्नलिखित

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

सी # परीक्षण नहीं कर सकते में है शून्य मूल्य के विरुद्ध एक मान प्रकार (जैसे रंग, बिंदु, आकार आदि ...)। ये प्रकार कभी भी शून्य नहीं होते हैं, लेकिन उनके पास प्रकार के लिए डिफ़ॉल्ट मान होता है- (पूर्णांक के लिए 0 की तरह), इसलिए, यदि आपको किसी मान प्रकार के लिए वैकल्पिक पैरामीटर पास करने की आवश्यकता है तो आप इसे new कीवर्ड के साथ बना सकते हैं जो आप चाहते हैं डिफ़ॉल्ट रूप से उपयोग करने या default keyword का उपयोग करने के लिए और फ्रेमवर्क को यह तय करने दें कि किस प्रकार के मान डिफ़ॉल्ट के लिए डिफ़ॉल्ट हैं। यदि आप ढांचे को चुनते हैं तो IsEmpty संपत्ति सत्य होगी।

+0

यह अजीब सी # में संकलक मुझे घोषित "रंग c = अशक्त" जब पैरामीटर की घोषणा नहीं दूँगी कि है। इसने शिकायत की कि मूल्य प्रकार के लिए शून्य असाइन करने में सक्षम नहीं है। मुझे "रंग सी = नया रंग()" और फिर "c.IsEmpty" के लिए मेरे कोड परीक्षण में कहना था। –

+1

@BillGregg ने सी # संस्करण जोड़ा – Steve

5

आप विधि ओवरलोड सकता

''' <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 
संबंधित मुद्दे