खोज…


टिप्पणियों

एक्सटेंशन विधियाँ वे विधियाँ ( Sub या Function ) हैं जो कार्यक्षमता को एक प्रकार में जोड़ते हैं (जो एक संदर्भ प्रकार या मान प्रकार हो सकता है)। ये प्रकार आपके स्वामित्व में हो सकते हैं या नहीं भी हो सकते हैं।

वे उसी विधानसभा में हो सकते हैं या नहीं हो सकते हैं, जिस प्रकार को संशोधित करने का उनका इरादा है। आप उन्हें अपने नामस्थान में अलग-थलग करके अपने विस्तार के तरीकों की अनुमति दे सकते हैं। या यदि आप पसंद करते हैं, तो आप उन्हें हमेशा उसी नामस्थान में शामिल करके उपलब्ध करा सकते हैं जिस प्रकार वे संशोधित करते हैं (सभी विधानसभा संदर्भ जगह और सही हैं)। एक्सटेंशन विधियों की ऑप्ट-इन शैली के अच्छे उदाहरण के लिए गिटहब पर एंटिटी फ्रेमवर्क कोर 1.0 परियोजना देखें।

VB में विस्तार विधियों की कुछ आवश्यकताएं हैं:

  • विस्तार विधियों को केवल मॉड्यूल में घोषित किया जा सकता है।
  • एक्सटेंशन विधियों को Extension() विशेषता के साथ सजाया जाना चाहिए।
  • ExtensionAttribute नाम स्थान आपके मॉड्यूल के भीतर उपलब्ध होना चाहिए।
    Imports System.Runtime.CompilerServices
  • विधि के लिए पहला पैरामीटर एक प्रकार का होना चाहिए जो इस पद्धति से जुड़ा होगा।
  • विधि का पहला पैरामीटर उस उदाहरण का प्रतिनिधित्व करेगा जो इस पद्धति को संचालित करता है। ( Me लिए समतुल्य अगर यह एक वास्तविक उदाहरण विधि थी)।
  • एक विस्तार विधि को सभी मापदंडों की आपूर्ति करके एक नियमित विधि के रूप में कहा जा सकता है यदि तत्काल वस्तु पर नहीं बुलाया गया है।

एक विस्तार विधि बनाना

एक्सटेंशन विधियाँ उन पुस्तकालयों के व्यवहार को विस्तारित करने के लिए उपयोगी होती हैं जो हमारे पास नहीं हैं।

वे संकलक की शुगर के लिए उदाहरण के तरीकों के समान उपयोग किए जाते हैं:

Sub Main()
    Dim stringBuilder = new StringBuilder()

    'Extension called directly on the object.
    stringBuilder.AppendIf(true, "Condition was true")

    'Extension called as a regular method. This defeats the purpose
    'of an extension method but should be noted that it is possible.
    AppendIf(stringBuilder, true, "Condition was true")

End Sub

<Extension>
Public Function AppendIf(stringBuilder As StringBuilder, condition As Boolean, text As String) As StringBuilder
    If(condition) Then stringBuilder.Append(text)

    Return stringBuilder
End Function

प्रयोग करने योग्य विस्तार विधि के लिए, विधि को Extension विशेषता की आवश्यकता होती है और Module में घोषित करने की आवश्यकता होती है।

विस्तार विधियों के साथ भाषा को अधिक कार्यात्मक बनाना

विस्तार पद्धति का एक अच्छा उपयोग भाषा को अधिक कार्यात्मक बनाना है

Sub Main()
    Dim strings = { "One", "Two", "Three" }

    strings.Join(Environment.NewLine).Print()
End Sub

<Extension>
Public Function Join(strings As IEnumerable(Of String), separator As String) As String
    Return String.Join(separator, strings)
End Function

<Extension>
Public Sub Print(text As String)
    Console.WriteLine(text)
End Sub

पैडिंग न्यूमेरिक्स

Public Module Usage
  Public Sub LikeThis()
    Dim iCount As Integer
    Dim sCount As String

    iCount = 245
    sCount = iCount.PadLeft(4, "0")

    Console.WriteLine(sCount)
    Console.ReadKey()
  End Sub
End Module



Public Module Padding
  <Extension>
  Public Function PadLeft(Value As Integer, Length As Integer) As String
    Return Value.PadLeft(Length, Space(Length))
  End Function



  <Extension>
  Public Function PadRight(Value As Integer, Length As Integer) As String
    Return Value.PadRight(Length, Space(Length))
  End Function



  <Extension>
  Public Function PadLeft(Value As Integer, Length As Integer, Character As Char) As String
    Return CStr(Value).PadLeft(Length, Character)
  End Function



  <Extension>
  Public Function PadRight(Value As Integer, Length As Integer, Character As Char) As String
    Return CStr(Value).PadRight(Length, Character)
  End Function
End Module

मजबूत नाम से विधानसभा संस्करण प्राप्त करना

एक एक्सटेंशन विधि को एक्सटेंशन के रूप में और एक नियमित विधि के रूप में कॉल करने का उदाहरण।

public Class MyClass  
  Sub Main()
        
        'Extension called directly on the object.
        Dim Version = Assembly.GetExecutingAssembly.GetVersionFromAssembly()

        'Called as a regular method.
        Dim Ver = GetVersionFromAssembly(SomeOtherAssembly)

    End Sub
End Class

एक मॉड्यूल में विस्तार विधि। यदि मॉड्यूल एक dll में संकलित हैं और किसी अन्य असेंबली में संदर्भित किया जाएगा, तो मॉड्यूल को सार्वजनिक करें।

Public Module Extensions
    ''' <summary>
    ''' Returns the version number from the specified assembly using the assembly's strong name.
    ''' </summary>
    ''' <param name="Assy">[Assembly] Assembly to get the version info from.</param>
    ''' <returns>[String]</returns>
    <Extension>
    Friend Function GetVersionFromAssembly(ByVal Assy As Assembly) As String
        Return Split(Split(Assy.FullName,",")(1),"=")(1)
    End Function
End Module


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow