আমি সি # এর লুকানো বৈশিষ্ট্যগুলির মাধ্যমে বেশ কিছুটা ব্রাউজিং শিখেছি এবং ভিবি.এনইটি-র জন্য অনুরূপ কিছু না পেয়ে আমি অবাক হয়েছি।
তাহলে এর কিছু লুকানো বা কম পরিচিত বৈশিষ্ট্যগুলি কী কী?
আমি সি # এর লুকানো বৈশিষ্ট্যগুলির মাধ্যমে বেশ কিছুটা ব্রাউজিং শিখেছি এবং ভিবি.এনইটি-র জন্য অনুরূপ কিছু না পেয়ে আমি অবাক হয়েছি।
তাহলে এর কিছু লুকানো বা কম পরিচিত বৈশিষ্ট্যগুলি কী কী?
উত্তর:
Exception When
দফা মূলত অজানা।
এই বিবেচনা:
Public Sub Login(host as string, user as String, password as string, _
Optional bRetry as Boolean = False)
Try
ssh.Connect(host, user, password)
Catch ex as TimeoutException When Not bRetry
''//Try again, but only once.
Login(host, user, password, True)
Catch ex as TimeoutException
''//Log exception
End Try
End Sub
Enum
এসভিবির সত্যিকারের লুকানো বৈশিষ্ট্যগুলির মধ্যে একটি হ'ল completionlist
এক্সএমএল ডকুমেন্টেশন ট্যাগ যা নিজের তৈরি করতে ব্যবহার করা যেতে পারেEnum
বর্ধিত কার্যকারিতা সহ ধরণের । যদিও এই বৈশিষ্ট্যটি সি # তে কাজ করে না।
আমার সাম্প্রতিক কোডের একটি উদাহরণ:
'
''' <completionlist cref="RuleTemplates"/>
Public Class Rule
Private ReadOnly m_Expression As String
Private ReadOnly m_Options As RegexOptions
Public Sub New(ByVal expression As String)
Me.New(expression, RegexOptions.None)
End Sub
Public Sub New(ByVal expression As String, ByVal options As RegexOptions)
m_Expression = expression
m_options = options
End Sub
Public ReadOnly Property Expression() As String
Get
Return m_Expression
End Get
End Property
Public ReadOnly Property Options() As RegexOptions
Get
Return m_Options
End Get
End Property
End Class
Public NotInheritable Class RuleTemplates
Public Shared ReadOnly Whitespace As New Rule("\s+")
Public Shared ReadOnly Identifier As New Rule("\w+")
Public Shared ReadOnly [String] As New Rule("""([^""]|"""")*""")
End Class
এখন, হিসাবে ঘোষিত ভেরিয়েবলের মান নির্ধারণের সময় Rule
, IDE সম্ভাব্য মানগুলির একটি IntelliSense তালিকা সরবরাহ করেRuleTemplates
।
যেহেতু এটি একটি বৈশিষ্ট্য যা আইডিই'র উপর নির্ভর করে, আপনি এটি ব্যবহার করার সময় এটি কেমন দেখাচ্ছে তা দেখানো কঠিন তবে আমি কেবল একটি স্ক্রিনশট ব্যবহার করব:
আসলে, ইন্টেলিসেন্স ব্যবহার করার সময় আপনি যা পান তার সাথে 100% অভিন্ন Enum
।
friend
বা enum হিসাবে একই বর্গ ব্যবহার করে: Rule
পরিবর্তে RuleTemplate
।
আপনি কি লাইক তুলনা অপারেটর লক্ষ্য করেছেন?
Dim b As Boolean = "file.txt" Like "*.txt"
এমএসডিএন থেকে আরও
Dim testCheck As Boolean
' The following statement returns True (does "F" satisfy "F"?)'
testCheck = "F" Like "F"
' The following statement returns False for Option Compare Binary'
' and True for Option Compare Text (does "F" satisfy "f"?)'
testCheck = "F" Like "f"
' The following statement returns False (does "F" satisfy "FFF"?)'
testCheck = "F" Like "FFF"
' The following statement returns True (does "aBBBa" have an "a" at the'
' beginning, an "a" at the end, and any number of characters in '
' between?)'
testCheck = "aBBBa" Like "a*a"
' The following statement returns True (does "F" occur in the set of'
' characters from "A" through "Z"?)'
testCheck = "F" Like "[A-Z]"
' The following statement returns False (does "F" NOT occur in the '
' set of characters from "A" through "Z"?)'
testCheck = "F" Like "[!A-Z]"
' The following statement returns True (does "a2a" begin and end with'
' an "a" and have any single-digit number in between?)'
testCheck = "a2a" Like "a#a"
' The following statement returns True (does "aM5b" begin with an "a",'
' followed by any character from the set "L" through "P", followed'
' by any single-digit number, and end with any character NOT in'
' the character set "c" through "e"?)'
testCheck = "aM5b" Like "a[L-P]#[!c-e]"
' The following statement returns True (does "BAT123khg" begin with a'
' "B", followed by any single character, followed by a "T", and end'
' with zero or more characters of any type?)'
testCheck = "BAT123khg" Like "B?T*"
' The following statement returns False (does "CAT123khg" begin with'
' a "B", followed by any single character, followed by a "T", and'
' end with zero or more characters of any type?)'
testCheck = "CAT123khg" Like "B?T*"
ভিজিবি এলিয়াসগুলির typedef
মাধ্যমে একটি আদিম ধরনের জানে Import
:
Imports S = System.String
Dim x As S = "Hello"
জেনেরিক ধরণের সাথে একত্রে ব্যবহৃত হলে এটি আরও কার্যকর:
Imports StringPair = System.Collections.Generic.KeyValuePair(Of String, String)
Imports
এটা করা উচিত. ;-) একরকম, এই ত্রুটিটি প্রায় পুরো বছর ধরে সনাক্ত করা হয়নি (এবং ২৮ টি উপস্থাপনা সংগ্রহ করেছে)।
Imports Assert = xUnit.Assert
উহু! এবং এক্সএমএল লিটারালগুলি ভুলে যাবেন না ।
Dim contact2 = _
<contact>
<name>Patrick Hines</name>
<%= From p In phoneNumbers2 _
Select <phone type=<%= p.Type %>><%= p.Number %></phone> _
%>
</contact>
<string>This string contains "quotes" and it's OK.</string>.Value
। (আমি এই বিশেষভাবে কুশলী যখন CSV ফাইল যেখানে প্রত্যেক ক্ষেত্র কোট ছিল পার্স উপর পরীক্ষা লেখার এটি হবে পাওয়া না হাত দ্বারা ঐ সমস্ত কোট অব্যাহতি হয়েছে মজা আমার পরীক্ষার লাইন।)
অবজেক্ট ইনিশিয়েশনও সেখানে আছে!
Dim x as New MyClass With {.Prop1 = foo, .Prop2 = bar}
DirectCast
DirectCast
একটি আশ্চর্যজনক। পৃষ্ঠতলে এটি CType
অপারেটরের মতোই কাজ করে যে এটি কোনও বস্তুকে এক প্রকার থেকে অন্য প্রকারে রূপান্তর করে। তবে এটি নিয়মের অনেক কঠোর সেট দ্বারা কাজ করে। CType
প্রকৃত আচরণ তাই প্রায়শই অস্বচ্ছ এবং কোন ধরণের রূপান্তর কার্যকর করা হয় তা মোটেও স্পষ্ট নয়।
DirectCast
শুধুমাত্র দুটি স্বতন্ত্র অপারেশন সমর্থন করে:
অন্য যে কোন ঢালাই কাজ নয় (যেমন একটি unbox বের করার চেষ্টা করবে Integer
একটি থেকে Double
) এবং একটি কম্পাইল সময় / রানটাইম এরর পরিণাম ডেকে আনবে (পরিস্থিতির উপর নির্ভর করে এবং যা স্ট্যাটিক টাইপ টিক চিহ্ন দেওয়ার দ্বারা সনাক্ত করা যাবে)। আমি তাই ব্যবহারDirectCast
যখনই সম্ভব , কারণ এটি আমার অভিপ্রায়টিকে সবচেয়ে ভালভাবে ধারণ করে: পরিস্থিতির উপর নির্ভর করে আমি হয় হয় পরিচিত ধরণের মান আনবক্স করতে চাই বা একটি উজান সম্পাদন করতে চাই। গল্পের শেষে.
ব্যবহার CType
অন্যদিকে করে কোডের পাঠককে ভাবছেন যে প্রোগ্রামার আসলেই কী উদ্দেশ্য করেছিল কারণ এটি ব্যবহারকারী-সংজ্ঞায়িত কোড কল করার সাথে সাথে বিভিন্ন ধরণের অপারেশনের সমাধান করে।
কেন এটি একটি লুকানো বৈশিষ্ট্য? ভিবি দলটি একটি গাইডলাইন 1 প্রকাশ করেছে যা কোডটিকে DirectCast
আরও অভিন্ন করার জন্য (যদিও এটি আসলে দ্রুততর!) ব্যবহারকে নিরুৎসাহিত করে । আমি যুক্তি দিচ্ছি যে এটি একটি খারাপ নির্দেশিকা যা উল্টো করা উচিত: যখনই সম্ভব হয়, DirectCast
আরও সাধারণ CType
অপারেটরের পক্ষ নেয় । এটি কোডটিকে আরও পরিষ্কার করে তোলে। CType
অন্যদিকে, কেবলমাত্র যদি এটি প্রকৃতপক্ষে উদ্দেশ্যপ্রাপ্ত হয় তখনই ডাকা উচিত, অর্থাত্ যখন সংকীর্ণ CType
অপারেটর (সিএফ। অপারেটর ওভারলোডিং ) কল করা উচিত।
1) আমি গাইডলাইনটির একটি লিঙ্ক নিয়ে আসতে পারিনি তবে আমি পল ভিককে এটি (ভিবি দলের প্রধান বিকাশকারী) গ্রহণ করতে পেরেছি :
বাস্তব বিশ্বে, আপনি খুব কমই পার্থক্যটি লক্ষ্য করতে চলেছেন, তাই আপনি আরও নমনীয় রূপান্তর অপারেটর যেমন সিটাইপ, সিআইএনটি ইত্যাদির সাথে যেতে পারেন might
(জ্যাক দ্বারা সম্পাদনা করুন: এখানে আরও জানুন: কীভাবে ভিবি.এনইটি-তে কাস্ট করা উচিত? )
TryCast
তখনই উল্লেখ করি নি যেহেতু আমার প্রধানত হ'ল একটি বিস্তৃত ব্যবহারের সাথে বেছে নিতে CType
।
TryCast
ডকুমেন্টেশন অনুসারে কেবলমাত্র রেফারেন্স টাইপগুলিতে কাজ করে।
If
শর্তসাপেক্ষ এবং coalesce অপারেটরআপনি এটিকে কীভাবে লুকিয়ে রাখবেন তা আমি জানি না, তবে আইফএফ ([অভিব্যক্তি], [যদি সত্য হয় তবে মান], [মান যদি মিথ্যা হয়]) হিসাবে অবজেক্ট ফাংশনটি গণনা করতে পারে।
এটা এত হিসাবে লুকানো না অবচিত ! ভিবি 9 তে If
অপারেটর রয়েছে যা অনেক ভাল এবং সি # এর শর্তসাপেক্ষ এবং কোয়েলেস অপারেটর হিসাবে ঠিক কাজ করে (আপনি যা চান তার উপর নির্ভর করে):
Dim x = If(a = b, c, d)
Dim hello As String = Nothing
Dim y = If(hello, "World")
অন্য একটি উদাহরণ দেখানোর জন্য সম্পাদিত:
এটি এর সাথে কাজ করবে If()
তবে এর সাথে ব্যতিক্রম ঘটবেIIf()
Dim x = If(b<>0,a/b,0)
:?
, এটি কেবল একটি সরলিকৃত সংস্করণ নয়।
এটি একটি চমৎকার এক। ভিবি.নেটের মধ্যে সিলেক্ট কেস স্টেটমেন্টটি খুব শক্তিশালী।
অবশ্যই মান আছে
Select Case Role
Case "Admin"
''//Do X
Case "Tester"
''//Do Y
Case "Developer"
''//Do Z
Case Else
''//Exception case
End Select
তবে আরও আছে ...
আপনি রেঞ্জগুলি করতে পারেন:
Select Case Amount
Case Is < 0
''//What!!
Case 0 To 15
Shipping = 2.0
Case 16 To 59
Shipping = 5.87
Case Is > 59
Shipping = 12.50
Case Else
Shipping = 9.99
End Select
এবং আরও বেশি...
আপনি (যদিও এটি ভাল ধারণা নাও হতে পারে) একাধিক ভেরিয়েবলগুলিতে বুলিয়ান চেক করতে পারেন:
Select Case True
Case a = b
''//Do X
Case a = c
''//Do Y
Case b = c
''//Do Z
Case Else
''//Exception case
End Select
Select Case True
হয় নি দেখায় যেমন যদি এটা মূল্যায়ন প্রতিটি এর Case
বিবৃতি এবং প্রতিটি এক যা সত্য কোড রান। তবে বাস্তবে এটি তাদের একের পর এক মূল্যায়ন করে এবং কেবল প্রথমটির কোডটি চালায় যা সত্য। সিনট্যাক্সIf
এই ক্ষেত্রে অনেক বেশি পরিষ্কার ( If...Else If...Else If...Else
)।
আমি সমস্ত সময় ব্যবহার করি এমন একটি প্রধান সময় সেভার হ'ল উইথ কীওয়ার্ড:
With ReallyLongClassName
.Property1 = Value1
.Property2 = Value2
...
End With
আমার চেয়ে বেশি টাইপ করা আমার পছন্দ নয়!
সেরা এবং সহজ সিএসভি পার্সার:
Microsoft.VisualBasic.FileIO.TextFieldParser
মাইক্রোসফ্টে একটি রেফারেন্স যুক্ত করে। ভিজুয়ালবাসিক, এটি অন্য কোনও। নেট ভাষাতে ব্যবহার করা যেতে পারে, যেমন সি #
(সম্পাদনা: এখানে আরও জানুন: আমি কি সর্বদা AndAlso এবং OrElse অপারেটর ব্যবহার করা উচিত? )
পদ্ধতিতে স্থির সদস্য।
উদাহরণ স্বরূপ:
Function CleanString(byval input As String) As String
Static pattern As New RegEx("...")
return pattern.Replace(input, "")
End Function
উপরের ফাংশনে, প্যাটার্নের নিয়মিত প্রকাশটি কেবল কখনও তৈরি করা হবে একবারই ফাংশনটি যতবার বলা হোক না কেন।
আরেকটি ব্যবহার হ'ল "এলোমেলো" উদাহরণটি চারপাশে রাখা:
Function GetNextRandom() As Integer
Static r As New Random(getSeed())
Return r.Next()
End Function
এছাড়াও, এটি ক্লাসের অংশীদারি সদস্য হিসাবে কেবল ঘোষণা করার মতো নয়; এইভাবে ঘোষিত আইটেমগুলি থ্রেড-সেফও হওয়ার গ্যারান্টিযুক্ত। এই দৃশ্যে কিছু আসে যায় না যেহেতু অভিব্যক্তিটি কখনই বদলাবে না, তবে এমন অন্যান্য রয়েছে যেখানে এটি হতে পারে।
Vb এ এই অপারেটরগুলির মধ্যে একটি পৃথক রয়েছে:
/
হয় Double
\
হয় Integer
বাকি উপেক্ষা
Sub Main()
Dim x = 9 / 5
Dim y = 9 \ 5
Console.WriteLine("item x of '{0}' equals to {1}", x.GetType.FullName, x)
Console.WriteLine("item y of '{0}' equals to {1}", y.GetType.FullName, y)
'Results:
'item x of 'System.Double' equals to 1.8
'item y of 'System.Int32' equals to 1
End Sub
আমি সত্যিই আমার "আমার" নেমস্পেসটি পছন্দ করি যা ভিজ্যুয়াল বেসিক 2005 সালে প্রবর্তিত হয়েছিল My আমার বেশ কয়েকটি গ্রুপের তথ্য এবং কার্যকারিতার শর্টকাট। এটি নিম্নলিখিত ধরণের তথ্যে দ্রুত এবং স্বজ্ঞাত অ্যাক্সেস সরবরাহ করে:
খুব কমই দরকারী, ইভেন্ট হ্যান্ডলিং ভারি কাস্টমাইজ করা যেতে পারে:
Public Class ApplePie
Private ReadOnly m_BakedEvent As New List(Of EventHandler)()
Custom Event Baked As EventHandler
AddHandler(ByVal value As EventHandler)
Console.WriteLine("Adding a new subscriber: {0}", value.Method)
m_BakedEvent.Add(value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
Console.WriteLine("Removing subscriber: {0}", value.Method)
m_BakedEvent.Remove(value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("{0} is raising an event.", sender)
For Each ev In m_BakedEvent
ev.Invoke(sender, e)
Next
End RaiseEvent
End Event
Public Sub Bake()
''// 1. Add ingredients
''// 2. Stir
''// 3. Put into oven (heated, not pre-heated!)
''// 4. Bake
RaiseEvent Baked(Me, EventArgs.Empty)
''// 5. Digest
End Sub
End Class
এরপরে নিম্নলিখিত ফ্যাশনে এটি পরীক্ষা করা যেতে পারে:
Module Module1
Public Sub Foo(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("Hmm, freshly baked apple pie.")
End Sub
Sub Main()
Dim pie As New ApplePie()
AddHandler pie.Baked, AddressOf Foo
pie.Bake()
RemoveHandler pie.Baked, AddressOf Foo
End Sub
End Module
আমি স্রেফ একটি নিবন্ধ পেয়েছি ""! অপারেটর, "অভিধান অনুসন্ধান অপারেটর" হিসাবেও জানেন। নিবন্ধটির একটি অংশ এখানে দেওয়া হয়েছে: http://panopticoncentral.net/articles/902.aspx
এর প্রযুক্তিগত নাম! অপারেটর হ'ল "অভিধান দেখানোর অপারেটর"। একটি অভিধান হ'ল কোনও সংগ্রহের ধরণ যা কোনও সংখ্যার পরিবর্তে কী দ্বারা সূচকযুক্ত, ঠিক যেমন একটি ইংরেজী অভিধানে প্রবেশের শব্দগুলি দ্বারা আপনি যে সংজ্ঞাটি চান তার দ্বারা সূচী করা হয়। অভিধানের ধরণটির সর্বাধিক সাধারণ উদাহরণ হ'ল সিস্টেম.কালেকশনস ash হ্যাশটেবল, যা আপনাকে হ্যাশটবেলে (কী, মান) জোড় যুক্ত করতে এবং তারপরে কীগুলি ব্যবহার করে মানগুলি পুনরুদ্ধার করতে দেয়। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি হ্যাশটেবলে তিনটি এন্ট্রি যুক্ত করেছে এবং "পোর্ক" কীটি ব্যবহার করে সেগুলির মধ্যে একটিকে আপ দেখায়।
Dim Table As Hashtable = New Hashtable
Table("Orange") = "A fruit"
Table("Broccoli") = "A vegetable"
Table("Pork") = "A meat"
Console.WriteLine(Table("Pork"))
দ্য ! অপারেটরটি কোনও অভিধান টাইপ থেকে মানগুলি সন্ধান করতে ব্যবহার করা যেতে পারে যা স্ট্রিংগুলি ব্যবহার করে এর মানকে সূচক করে। এর পরে শনাক্তকারী! লুকিং অপারেশনে কী হিসাবে ব্যবহৃত হয়। সুতরাং উপরের কোডটি পরিবর্তে লেখা যেতে পারে:
Dim Table As Hashtable = New Hashtable
Table!Orange = "A fruit"
Table!Broccoli = "A vegetable"
Table!Pork = "A meat"
Console.WriteLine(Table!Pork)
দ্বিতীয় উদাহরণটি সম্পূর্ণরূপে প্রথমটির সমতুল্য তবে কমপক্ষে আমার দৃষ্টিতে কেবল অনেক সুন্দর দেখায়। আমি দেখতে পাচ্ছি যে অনেক জায়গা আছে যেখানে! ব্যবহার করা যেতে পারে, বিশেষত যখন এটি এক্সএমএল এবং ওয়েবে আসে, যেখানে স্ট্রিং অনুসারে সংখ্যার সংগ্রহ রয়েছে col একটি দুর্ভাগ্য সীমাবদ্ধতা হ'ল জিনিসটি অনুসরণ করা! এখনও একটি বৈধ শনাক্তকারী হতে হবে, সুতরাং আপনি কী হিসাবে যে স্ট্রিংটি ব্যবহার করতে চান তাতে যদি কোনও অবৈধ শনাক্তকারী চরিত্র থাকে তবে আপনি এটি ব্যবহার করতে পারবেন না! অপারেটর. (উদাহরণস্বরূপ, আপনি "টেবিল! AB $ CD = 5" বলতে পারবেন না কারণ identif শনাক্তকারীদের ক্ষেত্রে বৈধ নয়)) ভিবি 6 এবং এর আগে আপনি অবৈধ শনাক্তকারীদের (যেমন "টেবিল! [AB $" এড়াতে বন্ধনী ব্যবহার করতে পারেন) সিডি] "), কিন্তু যখন আমরা কীওয়ার্ডগুলি এড়ানোর জন্য বন্ধনী ব্যবহার শুরু করি, তখন আমরা এটি করার ক্ষমতা হারাতে পারি। অধিকাংশ ক্ষেত্রে,
প্রকৃত প্রযুক্তিগত পেতে, x! Y কাজ করে যদি x এর একটি ডিফল্ট সম্পত্তি থাকে যা স্ট্রিং বা অবজেক্টকে প্যারামিটার হিসাবে নেয়। সেক্ষেত্রে, x! Y কে x.DefaultProperty ("y") এ রূপান্তরিত করা হবে। একটি আকর্ষণীয় পার্শ্ব দ্রষ্টব্য হ'ল এই সমস্ত কাজটি করার জন্য ভাষার লেক্সিকাল ব্যাকরণে একটি বিশেষ নিয়ম রয়েছে। দ্য ! অক্ষরটি ভাষাতে টাইপ অক্ষর হিসাবেও ব্যবহৃত হয়, এবং প্রকারের অক্ষরগুলি অপারেটরগুলির আগে খাওয়া হয়। সুতরাং কোনও বিশেষ নিয়ম ছাড়াই, x! Y কে "x! Y" এর পরিবর্তে "x! Y" হিসাবে স্ক্যান করা হবে। ভাগ্যক্রমে, যেহেতু এককথায় দু'জন শনাক্তকারী বৈধ, সেই ভাষাতে কোনও স্থান নেই, আমরা কেবলমাত্র নিয়মটি চালু করেছিলাম যে যদি পরবর্তী চরিত্রটি পরে হয়! একটি শনাক্তকারী এর শুরু, আমরা বিবেচনা! অপারেটর হতে হবে এবং কোনও টাইপ চরিত্র নয়।
এটি অন্তর্নির্মিত, এবং সি # এর একটি নির্দিষ্ট সুবিধা। একই নাম ব্যবহার না করেই একটি ইন্টারফেস পদ্ধতি প্রয়োগ করার ক্ষমতা।
যেমন:
Public Sub GetISCSIAdmInfo(ByRef xDoc As System.Xml.XmlDocument) Implements IUnix.GetISCSIInfo
End Sub
বাইওয়ালকে জোর করে
ভিবিতে, আপনি যদি আপনার যুক্তিগুলি অতিরিক্ত বন্ধনীগুলির সেটগুলিতে আবদ্ধ করেন তবে আপনি পদ্ধতির বাইরফ ঘোষণাকে ওভাররাইড করতে পারেন এবং এটিকে বাইওয়ালে পরিণত করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি 4,5,6 এর পরিবর্তে 4, 5, 5 উত্পাদন করে
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim R = 4
Trace.WriteLine(R)
Test(R)
Trace.WriteLine(R)
Test((R))
Trace.WriteLine(R)
End Sub
Private Sub Test(ByRef i As Integer)
i += 1
End Sub
প্রক্রিয়া কল দ্বারা আর্গুমেন্টটি সংশোধিত হচ্ছে না দেখুন - অন্তর্নিহিত পরিবর্তনশীল
নাম দিয়ে প্যারামিটারগুলি পাস করা এবং তাই তাদের পুনরায় অর্ডার করে
Sub MyFunc(Optional msg as String= "", Optional displayOrder As integer = 0)
'Do stuff
End function
ব্যবহার:
Module Module1
Sub Main()
MyFunc() 'No params specified
End Sub
End Module
যে কোনও ক্রমে ": =" পরামিতি বিশদটি ব্যবহার করেও বলা যেতে পারে:
MyFunc(displayOrder:=10, msg:="mystring")
ইউজিং স্টেটমেন্টটি ভিবি 8 হিসাবে নতুন, সি # টি শুরু থেকেই ছিল। এটি আপনার জন্য স্বয়ংক্রিয়ভাবে নিষ্পত্তি কল করে।
যেমন
Using lockThis as New MyLocker(objToLock)
End Using
আমদানির উপকরণগুলিও মূলত অজানা:
Import winf = System.Windows.Forms
''Later
Dim x as winf.Form
নিম্নলিখিত ইভেন্টের ঘোষণাটি বিবেচনা করুন
Public Event SomethingHappened As EventHandler
সি # তে, আপনি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে ইভেন্ট গ্রাহকদের জন্য চেক করতে পারেন:
if(SomethingHappened != null)
{
...
}
তবে ভিবি.এনইটি সংকলক এটি সমর্থন করে না। এটি আসলে একটি লুকানো ব্যক্তিগত সদস্য ক্ষেত্র তৈরি করে যা ইন্টেলিজেন্সে দৃশ্যমান নয়:
If Not SomethingHappenedEvent Is Nothing OrElse SomethingHappenedEvent.GetInvocationList.Length = 0 Then
...
End If
অধিক তথ্য:
http://jelle.druyts.net/2003/05/09/BehindTheScenesOfEventsInVBNET.aspx http://blogs.msdn.com/vbteam/archive/2009/09/25/testing-events- for- কিছুই-না- ডুগ -rothaus.aspx
কোনও কীওয়ার্ডের সাথে মেলে ধরতে যদি আপনার একটি ভেরিয়েবলের প্রয়োজন হয় তবে এটি বন্ধনীর সাহায্যে বন্ধ করুন। NEC না। যদিও সেরা অনুশীলন - তবে এটি বিজ্ঞতার সাথে ব্যবহার করা যেতে পারে।
যেমন
Class CodeException
Public [Error] as String
''...
End Class
''later
Dim e as new CodeException
e.Error = "Invalid Syntax"
উদাহরণস্বরূপ মন্তব্যসমূহ থেকে উদাহরণ (@ পন্টিডাম):
Class Timer
Public Sub Start()
''...
End Sub
Public Sub [Stop]()
''...
End Sub
এক্সএমএল লিটারালগুলি সম্পর্কে বেশ কয়েকটি উত্তর রয়েছে তবে এই নির্দিষ্ট ক্ষেত্রেটি সম্পর্কে নয়:
স্ট্রিং লিটারালগুলি আবদ্ধ করতে আপনি এক্সএমএল লিটারালগুলি ব্যবহার করতে পারেন যা অন্যথায় পালাতে হবে। স্ট্রিং লিটারেলগুলিতে উদাহরণস্বরূপ ডাবল-কোটস থাকে।
এর পরিবর্তে:
Dim myString = _
"This string contains ""quotes"" and they're ugly."
তুমি এটি করতে পারো:
Dim myString = _
<string>This string contains "quotes" and they're nice.</string>.Value
আপনি সিএসভি পার্সিংয়ের জন্য আক্ষরিক পরীক্ষা করলে এটি বিশেষত কার্যকর:
Dim csvTestYuck = _
"""Smith"", ""Bob"", ""123 Anywhere St"", ""Los Angeles"", ""CA"""
Dim csvTestMuchBetter = _
<string>"Smith", "Bob", "123 Anywhere St", "Los Angeles", "CA"</string>.Value
(আপনাকে <string>
অবশ্যই ট্যাগটি ব্যবহার করতে হবে না; আপনি নিজের পছন্দ মতো যে কোনও ট্যাগ ব্যবহার করতে পারেন))
<q>
পার্ল / রুবির ব্যবহারের মতো একটি ভাল ট্যাগ হবে। যাইহোক, এটি বেশ সুন্দর প্রতিমা। পছন্দ করি!
ডেটটাইম আপনার # তারিখকে ঘিরে ধরে আরম্ভ করা যেতে পারে
Dim independanceDay As DateTime = #7/4/1776#
আপনি এই সিনট্যাক্সের সাথে টাইপ অনুমিত ব্যবহার করতে পারেন
Dim independanceDay = #7/4/1776#
এটি কনস্ট্রাক্টর ব্যবহার করার চেয়ে অনেক সুন্দর
Dim independanceDay as DateTime = New DateTime(1776, 7, 4)
আপনার কেবল একটি লাইনে 2 লাইনের কোড থাকতে পারে। অত: পর:
Dim x As New Something : x.CallAMethod
Call (New Something).CallAMethod()
.চ্ছিক পরামিতি
বিকল্পগুলি নতুন ওভারলোডগুলি তৈরি করার চেয়ে অনেক সহজ, যেমন:
Function CloseTheSystem(Optional ByVal msg AS String = "Shutting down the system...")
Console.Writeline(msg)
''//do stuff
End Function
VB.Net এ শিরোনাম কেস একটি পুরানো VB6 fxn দ্বারা অর্জন করা যেতে পারে:
StrConv(stringToTitleCase, VbStrConv.ProperCase,0) ''0 is localeID
পরামিতি সহ সম্পত্তি
আমি কিছু সি # প্রোগ্রামিং করে চলেছি, এবং এমন একটি বৈশিষ্ট্য আবিষ্কার করেছি যা ভিবি ডট নেট অনুপস্থিত ছিল, তবে এখানে উল্লেখ করা হয়নি।
কীভাবে এটি করা যায় তার উদাহরণ (পাশাপাশি সি # সীমাবদ্ধতা) এখানে দেখা যাবে: প্যারামিটার সহ সি # তে সাধারণত গেট সেট বৈশিষ্ট্য ব্যবহার করে
আমি এই উত্তরটি থেকে কোডটি উদ্ধৃত করেছি:
Private Shared m_Dictionary As IDictionary(Of String, Object) = _
New Dictionary(Of String, Object)
Public Shared Property DictionaryElement(ByVal Key As String) As Object
Get
If m_Dictionary.ContainsKey(Key) Then
Return m_Dictionary(Key)
Else
Return [String].Empty
End If
End Get
Set(ByVal value As Object)
If m_Dictionary.ContainsKey(Key) Then
m_Dictionary(Key) = value
Else
m_Dictionary.Add(Key, value)
End If
End Set
End Property