امکانات کامپایلی جدید در Vs2008 نصبت به Vs2005
سلام بر دوستان دات نت کار.
من برای سایت دیگری این متن را حاضر کردم، گفتم شاید دوستان و اساتید اینجا هم هنوز از امکانات کامپایلر 2008 خبر نداشته باشند.
کدهای نمونه برای VB.Net هستند ولی همه امکانات زیر در C#.Net هم وجود دارند.
اگر دوستان خواستند و فرصت دهند، میتوانم کدهای C#.Net را هم بگذارم.
این اطلاعات فقط در مورد کامپایلر است و بحث کلاسهای جدید فریم ورک 3 و پروژه های جدید و... کاملاً جدا است و اصلاً در اینجا نمیگنجد.
توضیحات با لینک MSDN Online تکمیل شده و برای اطلاعات کامل باید به لینک ها مراجعه کنید.
لینک مرجع امکانات جدید در C#.Net
msdn.microsoft.com/en-us/library/bb383815.aspx
لینک مرجع امکانات جدید در VB.Net
msdn.microsoft.com/en-us/library/we86c8x2.aspx
==============
Local Type Inference
msdn.microsoft.com/en-us/library/bb384937.aspx
کد:
Dim num1 As Integer = 3 'VS2005
Dim num2 = 3 'VS2008
Using dbDr1 As System.Data.SqlClient.SqlDataReader = dbCom.ExecuteReader 'VS2005
Using dbDr2 = dbCom.ExecuteReader 'VS2008
Using graph1 As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(img) 'VS2005
Using graph2 = System.Drawing.Graphics.FromImage(img) 'VS2008
==============
Object Initializers
msdn.microsoft.com/en-us/library/bb385125.aspx
کد:
Dim cust1 As New Customer With {.Name = "Toni Poe", .City = "Louisville"}
'VS2005
Dim x As New TypeName
x.A = 25
x.B = "Hello"
FunctionName (x)
'VS2008
FunctionName(New TypeName() With {.A = 25, .B = "Hello"})
==============
Anonymous Types
msdn.microsoft.com/en-us/library/bb384767.aspx
کد:
'VS2005
Friend NotInheritable Class TName
Public ReadOnly Code As Integer
Public City As String
Public Sub New(ByVal code As Integer, ByVal city As String)
Me.Code = code
Me.City = city
End Sub
End Structure
'...
Dim x = New TName(98, "Theran")
'VS2008
Dim x = New With {Key .Code = 98, .City = "Theran"}
==============
Extension Methods (فقط برای دات نت 3)
msdn.microsoft.com/en-us/library/bb384936.aspx
کد:
Module StringExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function IsEmpty1(ByVal array As System.Array) As Boolean
Return (array Is Nothing) OrElse (array.Length <= 0)
End Function
<System.Runtime.CompilerServices.Extension()> _
Public Function IsEmpty2(Of T)(ByVal array() As T) As Boolean
Return (array Is Nothing) OrElse (array.Length <= 0)
End Function
<System.Runtime.CompilerServices.Extension()> _
Public Sub MsgBox(ByVal str As String)
System.Windows.Forms.MessageBox.Show(str)
End Sub
End Module
'...
Dim a() As Integer = {1,2,3}
If a.IsEmpty1 Then ...
If a.IsEmpty2 Then ...
Dim b As String = "Hello"
b.MsgBox()
==============
Lambda Expressions
msdn.microsoft.com/en-us/library/bb531253.aspx
کد:
Dim add1 = Function(num As Integer) num + 1
Console.WriteLine(add1(5))
Console.WriteLine(add1(7))
AddHandler Me.Button1.Click, Function(sender As Object, e As System.EventArgs) System.Windows.Forms.MessageBox.Show("Hello")
==============
Nullable Value Types
msdn.microsoft.com/en-us/library/ms235245.aspx
کد:
Dim x1 As System.Nullable(Of Integer) 'VS2005
Dim x2? As Integer 'VS2008
Dim x3 As Integer? 'VS2008
x2 = Nothing
==============
If Operator
msdn.microsoft.com/en-us/library/bb513985.aspx
(توجه:
VB از قدیم یک تابع IIf داشته ولی IIf تابع بوده و اصلاً معادل این اپراتور جدید نیست.
این اپراتور معادل دقیق اپراتور ?: در زبان C است
)
کد:
'VS2005
If (a>b) Then x = "OK" Else x = "Cancel"
'VS2008
x = If( a>b , "OK" , "Cancel")
'VS2005
If (e Is Nothing) Then y = f Else y = e
'VS2008
y = If(e, f)
==============
Partial Methods
msdn.microsoft.com/en-us/library/bb531348.aspx
(مشابه Partial Class ها که در 2005 اضافه شده بود.)
کد:
'File1.vb
Partial Public Sub AAA()
End Sub
'File2.vb
Public Sub AAA()
'...
End Sub
==============
امکان تایپ مستقیم و کار مستقیم روی دیتاهای XML با قابلیت بینظیر IntelliSense (فقط برای دات نت 3)
msdn.microsoft.com/en-us/library/bb384833.aspx
msdn.microsoft.com/en-us/library/bb384460.aspx
msdn.microsoft.com/en-us/library/bb531325.aspx
کد:
Dim book As XElement = _
<<%= elementType %>
isbn="1234"
<%= attributeName1 %>=<%= attributeValue1 %>
<%= New XAttribute(attributeName2, attributeValue2) %>
/>
Dim contact = _
<ns:contact>
<ns:name>Patrick Hines</ns:name>
<ns:phone ns:type="home">206-555-0144</ns:phone>
<ns:phone ns:type="work">425-555-0145</ns:phone>
</ns:contact>
Dim phoneTypes = _
<phoneTypes>
<%= From phone In contact.<ns:phone> _
Select <type><%= phone.@ns:type %></type> _
%>
</phoneTypes>
==============
SQLServer را در داخل دیتاهای کدهای خود تجربه کنید! LINQ (فقط برای دات نت 3)
msdn.microsoft.com/en-us/library/bb385100.aspx
msdn.microsoft.com/en-us/library/bb384830.aspx
msdn.microsoft.com/en-us/library/bb763068.aspx
کد:
Dim customers As List(Of Customer) = GetCustomerList()
Dim customersByCountry = _
From cust In customers _
Order By cust.Country, cust.City _
Group By CountryName = cust.Country _
Into RegionalCustomers = Group, Count() _
Order By CountryName
===============
:10: