Visual Basic .NET Language
विजुअल बेसिक 14.0 सुविधाएँ
खोज…
परिचय
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 | स्टैक ओवरफ्लो से उत्पन्न त्रुटियों को संभालता है। |
--------------------------- | ------------------------ |