VB.Net/Generics/Generic Class — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Версия 19:40, 26 мая 2010
Содержание
Declare a generic type
<source lang="vbnet"> Public Class Car End Class Module Program
Sub Main() Dim myCars As New List(Of Car) myCars.Add(New Car()) Console.WriteLine(myCars.Count) Dim MyInts As New List(Of Integer) MyInts.Add(50) Dim val As Integer = MyInts.Count Console.WriteLine(MyInts.Count) End Sub
End Module
</source>
Generic Class Demo
<source lang="vbnet"> Public Class MainClass
Public Shared Sub Main() Dim talker1 As New GenericTalker(Of Dog)() talker1.Talker = New Dog() talker1.sayHello() Dim talker2 As New GenericTalker(Of Cat)() talker2.Talker = New Cat() talker2.sayHello() End Sub
End Class Public Class GenericTalker(Of T)
Public Talker As T Public Sub SayHello() Dim helloWorld As String helloWorld = Talker.ToString() Console.WriteLine(helloWorld) End Sub
End Class Public Class Dog
Public Overrides Function ToString() As String Return "Dog!" End Function
End Class Public Class Cat
Public Overrides Function ToString() As String Return "Cat" End Function
End Class Public Class Mouse
Public Overrides Function ToString() As String Return "Mouse" End Function
End Class Public Class Person
Public Overrides Function ToString() As String Return "Person" End Function
End Class
</source>
Generic List stores Generic Class
<source lang="vbnet"> Imports System.Collections Imports System.Collections.Generic Public Class MainClass
Public Shared Sub Main() Dim custColl As New List(Of Customer)() Dim cust As New Customer("1", "Name") cust.AddItem(New Order(DateTime.Parse("10/01/2004"), "1", "N")) cust.AddItem(New Order(DateTime.Parse("10/03/2004"), "2", "X")) cust.AddItem(New Order(DateTime.Parse("10/07/2004"), "3", "P")) custColl.Add(cust) cust = New Customer("2", "name 1") cust.AddItem(New Order(DateTime.Parse("11/04/2004"), "6", "P")) cust.AddItem(New Order(DateTime.Parse("11/07/2004"), "8", "Y")) cust.AddItem(New Order(DateTime.Parse("12/12/2004"), "9", "K")) custColl.Add(cust) cust = New Customer("3", "Name 3") cust.AddItem(New Order(DateTime.Parse("10/01/2004"), "4", "W")) custColl.Add(cust)
For custIdx As Int32 = 0 To (custColl.Count - 1) cust = custColl(custIdx) Console.Out.WriteLine("Customer-) ID: {0}, Name: {1}", cust.Id, cust.Name) Dim orders() As Order = cust.Items For orderIdx As Int32 = 0 To (orders.Length - 1) Dim ord As Order = orders(orderIdx) Console.Out.WriteLine(" Order-> Date: {0}, Item: {1}, Desc: {2}", ord.OrderDate, ord.ItemId, ord.Description) Next Next
Dim empColl As New List(Of Employee)() Dim emp As New Employee("1", "R") empColl.Add(emp) emp = New Employee("2", "M") empColl.Add(emp) emp = New Employee("3", "B") emp.AddItem(New Employee("6", "S")) emp.AddItem(New Employee("7", "B")) emp.AddItem(New Employee("8", "T")) empColl.Add(emp) For mgrIdx As Int32 = 0 To (empColl.Count - 1) Dim manager As Employee = empColl(mgrIdx) Console.Out.WriteLine("Manager-) ID: {0}, Name: {1}", manager.Id, manager.Name) For idx As Int32 = 0 To (manager.Items.Length - 1) emp = manager.Items(idx) Console.Out.WriteLine(" Employee-) Id: {0}, Name: {1}", emp.Id, emp.Name) Next Next End Sub
End Class Public Class Customer
Inherits Person(Of Order) Public Sub New(ByVal Id As String, ByVal Name As String) MyBase.New(Id, Name) End Sub
End Class
Public Class Employee
Inherits Person(Of Employee) Public Sub New(ByVal Id As String, ByVal Name As String) MyBase.New(Id, Name) End Sub
End Class
Public Class Order
Public OrderDate As DateTime Public ItemId As String Public Description As String Public Sub New(ByVal OrderDate As DateTime, ByVal ItemId As String, ByVal Description As String) Me.OrderDate = OrderDate Me.ItemId = ItemId Me.Description = Description End Sub
End Class
Public Class Person(Of T)
Public Name As String Public Id As String Private _items As List(Of T) Public Sub New(ByVal Id As String, ByVal Name As String) Me.Id = Id Me.Name = Name Me._items = New List(Of T) End Sub Public ReadOnly Property Items() As T() Get Return Me._items.ToArray() End Get End Property Public Sub AddItem(ByVal newItem As T) Me._items.Add(newItem) End Sub
End Class
</source>
Generic Point Structure
<source lang="vbnet">
Option Explicit On Option Strict On Module Program
Sub Main() Dim intPt As New Point(Of Integer)(100, 100) Console.WriteLine(intPt.ToString()) Dim dblPt As New Point(Of Double)(5.6, 3.23) Console.WriteLine(dblPt.ToString()) Dim p1 As New Point(Of Integer)(10, 43) Dim p2 As New Point(Of Integer)(6, 987) Console.WriteLine(p1) Console.WriteLine(p2) Swap(Of Point(Of Integer))(p1, p2) Swap(p1, p2) Console.WriteLine(p1) Console.WriteLine(p2) End Sub Public Function Swap(Of T)(ByRef a As T, ByRef b As T) As T Console.WriteLine("T is a {0}.", GetType(T)) Dim temp As T temp = a a = b b = temp End Function
End Module Public Structure Point(Of T)
Private xPos, yPos As T Public Sub New(ByVal x As T, ByVal y As T) xPos = x : yPos = y End Sub Public Property X() As T Get Return xPos End Get Set(ByVal value As T) xPos = value End Set End Property Public Property Y() As T Get Return xPos End Get Set(ByVal value As T) yPos = value End Set End Property Public Overrides Function ToString() As String Return String.Format("({0}, {1})", xPos, yPos) End Function
End Structure
</source>