VB.Net/Class/Class Type

Материал из VB Эксперт
Перейти к: навигация, поиск

Check Class Type in For each Loop

Imports System
Imports System.Collections
Public Class MainClass
    
    Shared Sub Main(ByVal args As String())
        Dim people As New Collection
        people.Add(New Employee("A"))
        people.Add(New Customer("B"))

        " Works.
        Dim emp As Employee
        For Each person As Object In people
            If TypeOf person Is Employee Then
                emp = CType(person, Employee)
                Console.WriteLine(emp.Name)
            ElseIf TypeOf person Is Customer Then
                Console.WriteLine(CType(person, Customer).Name)
            End If
        Next person
    End Sub
End Class

Public Class Employee
    Public Name As String
    Public Sub New(ByVal new_name As String)
        Name = new_name
    End Sub
    Public Overridable Function IsManager() As Boolean
        Return False
    End Function
End Class
Public Class Customer
    Public Name As String
    Public Sub New(ByVal new_name As String)
        Name = new_name
    End Sub
End Class
Public Class Manager
    Inherits Employee
    Public Sub New(ByVal new_name As String)
        MyBase.new(new_name)
    End Sub
    Public Overrides Function IsManager() As Boolean
        Return True
    End Function
End Class


CType a Class

Imports System
Imports System.Collections
Public Class MainClass
    
    Shared Sub Main(ByVal args As String())
        Dim employees As New Collection
        employees.Add(New Employee("A"))
        employees.Add(New Manager("B"))
        employees.Add(New Manager("C"))
        employees.Add(New Employee("D"))
        ShowEmployees(employees)
        " Works.
        Dim emp As Employee
        For i As Integer = employees.Count To 1 Step -1
            emp = CType(employees(i), Employee)
            If emp.IsManager Then employees.Remove(i)
        Next i
        ShowEmployees(employees)
    End Sub
    Shared Private Sub ShowEmployees(ByVal employees As Collection)
        For Each emp As Employee In employees
            Console.WriteLine( emp.Name & vbCrLf )
        Next emp
    End Sub
End Class

Public Class Employee
    Public Name As String
    Public Sub New(ByVal new_name As String)
        Name = new_name
    End Sub
    Public Overridable Function IsManager() As Boolean
        Return False
    End Function
End Class
Public Class Customer
    Public Name As String
    Public Sub New(ByVal new_name As String)
        Name = new_name
    End Sub
End Class
Public Class Manager
    Inherits Employee
    Public Sub New(ByVal new_name As String)
        MyBase.new(new_name)
    End Sub
    Public Overrides Function IsManager() As Boolean
        Return True
    End Function
End Class