VB.Net Tutorial/Operator/Is — различия между версиями

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

Версия 19:40, 26 мая 2010

Demonstrate "is a" relationship

<source lang="vbnet">Class Tester

  Shared Sub Main()
     Dim point1, point2 As Point
     Dim circle1, circle2 As Circle
     point1 = New Point(30, 50)
     circle1 = New Circle(120, 89, 2.7)
     Console.WriteLine("Point point1: " & point1.ToString() & _
        vbCrLf & "Circle circle1: " & circle1.ToString())
     point2 = circle1
     Console.WriteLine("Circle circle1 (via point2): " & point2.ToString())
     circle2 = CType(point2, Circle) " allowed only via cast
     Console.WriteLine("Circle circle1 (via circle2): " & circle2.ToString())
     If (TypeOf point1 Is Circle) Then
        circle2 = CType(point1, Circle)
        Console.WriteLine("cast successful")
     Else
        Console.WriteLine("point1 does not refer to a Circle")
     End If
  End Sub

End Class Public Class Point

  Private mX, mY As Integer
  Public Sub New()
  End Sub " New
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer)
  End Sub " New
  Public Overrides Function ToString() As String
     Return "[" & mX & ", " & mY & "]"
  End Function " ToString

End Class Public Class Circle

  Inherits Point 
  Private mRadius As Double
  Public Sub New()
  End Sub " New
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer, ByVal radiusValue As Double)
     MyBase.New(xValue, yValue)
  End Sub " New
  Public Overrides Function ToString() As String
     Return "Center= " & MyBase.ToString() & _
        "; Radius = " & mRadius
  End Function " ToString

End Class</source>

Point point1: [0, 0]
Circle circle1: Center= [0, 0]; Radius = 0
Circle circle1 (via point2): Center= [0, 0]; Radius = 0
Circle circle1 (via circle2): Center= [0, 0]; Radius = 0
point1 does not refer to a Circle

Use Is and As to convert a class to its implenented Interface

<source lang="vbnet">Imports System

    Interface Printable
        Sub Read( )
        Sub Write(ByVal obj As Object)
        Property Status( ) As Integer
    End Interface 
    Interface Zippable
        Sub Zip( )
        Sub Unzip( )
    End Interface 
    Public Class Document 
    Implements Printable
        Public Sub New(ByVal s As String)
            Console.WriteLine("Creating document with: {0}", s)
        End Sub 
        Public Sub Read( ) Implements Printable.Read
            Console.WriteLine("Implementing the Read Method for Printable")
        End Sub 
        Public Sub Write(ByVal o As Object) Implements Printable.Write
            Console.WriteLine("Implementing the Write Method for Printable")
        End Sub "Write
        Public Property Status( ) As Integer Implements Printable.Status
            Get
                Return Status
            End Get
            Set(ByVal Value As Integer)
                Status = Value
            End Set
        End Property
        Private myStatus As Integer = 0
    End Class "Document
    Class Tester
        Public Sub Run( )
        End Sub "Run
        Shared Sub Main( )
            Dim doc As New Document("Test Document")
            If TypeOf doc Is Printable Then
                Dim isDoc As Printable = doc
                isDoc.Read( )
            Else
                Console.WriteLine("Could not cast to Printable")
            End If
            If TypeOf doc Is Zippable Then
                Dim icDoc As Zippable = doc
                icDoc.Zip( )
            Else
                Console.WriteLine("Could not cast to Zippable")
            End If
        End Sub "Main
    End Class</source>
Creating document with: Test Document
Implementing the Read Method for Printable
Could not cast to Zippable