खोज…


परिचय

Visual Basic 14 Visual Basic का संस्करण है जिसे Visual Studio 2015 के भाग के रूप में भेजा गया था।

इस संस्करण को VB के लगभग 1.3 मिलियन लाइनों में खरोंच से फिर से लिखा गया था। सामान्य चिड़चिड़ाहट को दूर करने और सामान्य कोडिंग पैटर्न को क्लीनर बनाने के लिए कई विशेषताएं जोड़ी गईं।

विजुअल बेसिक का वर्जन नंबर 12 से 14 के बीच सीधा चला गया। स्किपिंग 13. यह वीबी को विजुअल स्टूडियो के वर्जन नंबर के अनुरूप रखने के लिए किया गया था।

अशक्त सशर्त संचालक

क्रिया की जाँच करने से बचने के लिए ?. ऑपरेटर को भाषा में पेश किया गया है।

पुरानी क्रिया सिंटेक्स:

If myObject IsNot Nothing AndAlso myObject.Value >= 10 Then

अब संक्षिप्त द्वारा प्रतिस्थापित किया जा सकता है:

If myObject?.Value >= 10 Then

? ऑपरेटर विशेष रूप से शक्तिशाली होता है जब आपके पास गुणों की एक श्रृंखला होती है। निम्नलिखित को धयान मे रखते हुए:

Dim fooInstance As Foo = Nothing
Dim s As String

आम तौर पर आपको कुछ इस तरह लिखना होगा:

If fooInstance IsNot Nothing AndAlso fooInstance.BarInstance IsNot Nothing Then
    s = fooInstance.BarInstance.Baz
Else
    s = Nothing
End If

लेकिन के साथ ? ऑपरेटर को इसके साथ बदला जा सकता है:

s = fooInstance?.BarInstance?.Baz

NameOf ऑपरेटर

NameOf ऑपरेटर संकलित समय पर नाम स्थान, प्रकार, चर और सदस्य नामों को हल करता है और उन्हें स्ट्रिंग समकक्ष के साथ बदल देता है।

उपयोग मामलों में से एक:

Sub MySub(variable As String)
    If variable Is Nothing Then Throw New ArgumentNullException("variable")
End Sub

पुराने वाक्यविन्यास चर का नाम बदलने और हार्ड-कोडित स्ट्रिंग को गलत मान पर छोड़ने के जोखिम को उजागर करेगा।

Sub MySub(variable As String)
    If variable Is Nothing Then Throw New ArgumentNullException(NameOf(variable))
End Sub

NameOf साथ, चर का नाम बदलने से केवल संकलक त्रुटि होगी। यह नाम बदलने के उपकरण को एक ही प्रयास से दोनों का नाम बदलने की भी अनुमति देगा।

NameOf ऑपरेटर केवल कोष्ठक में संदर्भ के अंतिम घटक का उपयोग करता है। यह महत्वपूर्ण है जब NameOf ऑपरेटर में नामस्थान जैसी किसी चीज़ को NameOf

Imports System

Module Module1
    Sub WriteIO()
        Console.WriteLine(NameOf(IO)) 'displays "IO"
        Console.WriteLine(NameOf(System.IO)) 'displays "IO"
    End Sub
End Module

ऑपरेटर उस नाम के संदर्भ का भी उपयोग करता है जो किसी भी नाम बदलने वाले आयातों को हल किए बिना टाइप किया गया है। उदाहरण के लिए:

Imports OldList = System.Collections.ArrayList

Module Module1
    Sub WriteList()
        Console.WriteLine(NameOf(OldList)) 'displays "OldList"
        Console.WriteLine(NameOf(System.Collections.ArrayList)) 'displays "ArrayList"
    End Sub
End Module

स्ट्रिंग इंटरपोलेशन

यह नई सुविधा स्ट्रिंग के संघनन को अधिक पठनीय बनाती है। इस सिंटैक्स को इसके समतुल्य String.Format कॉल पर संकलित किया जाएगा।

स्ट्रिंग प्रक्षेप के बिना:

String.Format("Hello, {0}", name)

स्ट्रिंग प्रक्षेप के साथ:

$"Hello, {name}"

दो लाइनें बराबर हैं और दोनों String.Format को कॉल करने के लिए संकलित हैं।

String.Format में के रूप में, कोष्ठक किसी भी एक अभिव्यक्ति (विधि, गुण, एक अशक्त coalescing ऑपरेटर एट cetera के लिए कॉल) हो सकता है।

स्ट्रिंग इंटरपोलेशन String.Format पर पसंदीदा तरीका है क्योंकि यह कुछ रनटाइम त्रुटियों को होने से रोकता है। निम्नलिखित String.Format लाइन पर विचार करें:

String.Format("The number of people is {0}/{1}", numPeople)

यह संकलित करेगा, लेकिन एक रनटाइम त्रुटि का कारण होगा क्योंकि कंपाइलर यह जांच नहीं करता है कि तर्कों की संख्या प्लेसहोल्डर्स से मेल खाती है।

पढ़ें- केवल ऑटो-गुण

इस प्रारूप में VB.NET में केवल-पढ़ने के गुण हमेशा संभव थे:

Public Class Foo

  Private _MyProperty As String = "Bar"

  Public ReadOnly Property MyProperty As String
    Get
      Return _MyProperty
    End Get
  End Property

End Class

विजुअल बेसिक का नया संस्करण संपत्ति घोषणा के लिए एक छोटे से हाथ की अनुमति देता है जैसे:

Public Class Foo

  Public ReadOnly Property MyProperty As String = "Bar"

End Class

संकलक द्वारा उत्पन्न वास्तविक कार्यान्वयन दोनों उदाहरणों के लिए बिल्कुल समान है। इसे लिखने का नया तरीका सिर्फ एक छोटा हाथ है। कंपाइलर अभी भी प्रारूप के साथ एक निजी फ़ील्ड उत्पन्न करेगा: _<PropertyName> रीड-ओनली संपत्ति को वापस करने के लिए।

आंशिक मॉड्यूल और इंटरफेस

आंशिक कक्षाओं के समान विज़ुअल बेसिक का नया संस्करण अब आंशिक मॉड्यूल और आंशिक इंटरफेस को संभालने में सक्षम है। वाक्यविन्यास और व्यवहार ठीक वैसा ही है जैसा कि आंशिक वर्गों के लिए होता है।

एक आंशिक मॉड्यूल उदाहरण:

Partial Module Module1
  Sub Main()
    Console.Write("Ping -> ")
    TestFunktion()
  End Sub
End Module

Partial Module Module1
  Private Sub TestFunktion()
    Console.WriteLine("Pong")
  End Sub
End Module

और एक आंशिक इंटरफ़ेस:

Partial Interface Interface1
  Sub Methode1()
End Interface

Partial Interface Interface1
  Sub Methode2()
End Interface

Public Class Class1
  Implements Interface1
  Public Sub Methode1() Implements Interface1.Methode1
    Throw New NotImplementedException()
  End Sub

  Public Sub Methode2() Implements Interface1.Methode2
    Throw New NotImplementedException()
  End Sub
End Class

जैसे कि आंशिक वर्गों के लिए आंशिक मॉड्यूल और इंटरफेस की परिभाषाएँ समान नामस्थान और उसी विधानसभा में स्थित होनी चाहिए। ऐसा इसलिए है क्योंकि संकलन के दौरान मॉड्यूल और इंटरफेस के आंशिक भागों को मिला दिया जाता है और संकलित असेंबली में ऐसा कोई संकेत नहीं होता है कि मॉड्यूल या इंटरफ़ेस की मूल परिभाषा विभाजित थी।

मल्टीलाइन स्ट्रिंग लिटरल

VB अब स्ट्रिंग शाब्दिक की अनुमति देता है जो कई लाइनों पर विभाजित होता है।

पुराना सिंटैक्स:

Dim text As String = "Line1" & Environment.NewLine & "Line2"

नया वाक्यविन्यास:

Dim text As String = "Line 1
Line 2"

#Region निर्देश सुधार

#Region निर्देश अब तरीकों के अंदर रखा जा सकता है और यहां तक कि तरीकों, वर्गों और मॉड्यूल पर फैल सकता है।

#Region "A Region Spanning A Class and Ending Inside Of A Method In A Module"
   Public Class FakeClass
    'Nothing to see here, just a fake class.
   End Class

   Module Extensions

    ''' <summary>
    ''' Checks the path of files or directories and returns [TRUE] if it exists.
    ''' </summary>
    ''' <param name="Path">[Sting] Path of file or directory to check.</param>
    ''' <returns>[Boolean]</returns>
    <Extension>
    Public Function PathExists(ByVal Path As String) As Boolean
        If My.Computer.FileSystem.FileExists(Path) Then Return True
        If My.Computer.FileSystem.DirectoryExists(Path) Then Return True
        Return False
    End Function

    ''' <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
#End Region
        Return Split(Split(Assy.FullName, ",")(1), "=")(1)
    End Function
End Module

अंतर्निहित लाइन निरंतरता के बाद टिप्पणियाँ

वीबी 14.0 निहित लाइन निरंतरता के बाद टिप्पणियों को जोड़ने की क्षमता का परिचय देता है।

Dim number =
    From c As Char 'Comment
    In "dj58kwd92n4" 'Comment
    Where Char.IsNumber(c) 'Comment
    Select c 'Comment

उपवाद सम्भालना

कोडिंग के दौरान, अप्रत्याशित त्रुटियां अक्सर पर्याप्त होती हैं, जिसमें डीबगिंग और परीक्षण की आवश्यकता होती है। लेकिन कभी-कभी त्रुटियां वास्तव में अपेक्षित होती हैं और इसे दरकिनार करने के लिए, Try..Catch..Throw..Finally..End Try ब्लॉक करना होता है।

एक त्रुटि को सही ढंग से प्रबंधित करने के लिए, कोड को Try..Catch ब्लॉक में रखा गया है, जिससे Catch , जैसा कि नाम बताता है, इस ब्लॉक में उत्पन्न होने वाले सभी अपवादों को पकड़ लेगा।

और अपवाद के मामले में, हमारे पास त्रुटि को Throw की संभावना है, जो इसे उपयोगकर्ता को सूचित करने या कोड में आंतरिक रूप से प्रबंधित करने के लिए लौटाता है।

Finally हिस्सा अंतिम कोड है कि, परिणाम कुछ भी हो, अगर कोई अपवाद है या नहीं, तो कोड ब्लॉक से बाहर जाने से पहले चलेगा।

यदि हमें घड़ी को पॉप-आउट करने की आवश्यकता होती है, तो Exit Try स्टेटमेंट है जिसका उपयोग किया जा सकता है। लेकिन यहां भी, Finally अनुभाग में कोड समाप्त होने से पहले निष्पादित किया जाएगा।

वाक्य रचना सरल है;

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ]
End Try

जहां केवल Try और End Try अनिवार्य है। बाकी को नजरअंदाज किया जा सकता है, लेकिन एक अच्छे अभ्यास के रूप में, Finally हिस्सा शामिल करें, भले ही वह खाली छोड़ दिया जाए।

अपवाद पर आते हैं, विभिन्न प्रकार के अपवाद होते हैं जिन्हें पकड़ा जा सकता है। वे .net फ्रेमवर्क से उपलब्ध अपवादों को तैयार कर रहे हैं, जैसा कि नीचे है;

अपवाद कक्षा संक्षिप्त विवरण
System.IO.IOException I / O त्रुटियों को संभालता है
System.IndexOutOfRangeException रेंज से बाहर एक सरणी इंडेक्स का संदर्भ देता है
System.ArrayTypeMismatchException जब प्रकार सरणी प्रकार के साथ बेमेल हो
System.NullReferenceException एक अशक्त वस्तु को संदर्भित करने से उत्पन्न त्रुटियों को संभालता है।
System.DivideByZeroException शून्य से लाभांश को विभाजित करने से उत्पन्न त्रुटियों को संभालता है।
System.InvalidCastException टाइपकास्टिंग के दौरान उत्पन्न त्रुटियों को संभालता है।
System.OutOfMemoryException अपर्याप्त मुक्त मेमोरी से उत्पन्न त्रुटियों को संभालता है।
System.StackOverflowException स्टैक ओवरफ्लो से उत्पन्न त्रुटियों को संभालता है।
--------------------------- ------------------------


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