VB.Net Tutorial/Class Module/Interface

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

Implement Interface

Option Strict On
 Imports System
 Interface Printable
     Sub Read( )
     Sub Write(ByVal obj As Object)
     Property Status( ) As Integer
 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
     Public Property Status( ) As Integer Implements Printable.Status
         Get
             Return myStatus
         End Get
         Set(ByVal Value As Integer)
             myStatus = Value
         End Set
     End Property
     Private myStatus As Integer = 0
 End Class
 Class Tester
     Public Shared Sub Main( )
         Dim doc As New Document("Test Document")
         doc.Status = -1
         doc.Read( )
         Console.WriteLine("Document Status: {0}", doc.Status)
     End Sub 
 End Class
Creating document with: Test Document
Implementing the Read Method for Printable
Document Status: -1

Inheritance And Interfaces

Imports System
Imports System.Collections
Public Interface Printable
  ReadOnly Property Print() As Integer
End Interface
Public Class Money
  Implements Printable
  Protected mTransactions As New ArrayList()
  ReadOnly Property Print() As Integer Implements Printable.Print
    Get
      Return mTransactions.Count
    End Get
  End Property
  Public Overridable ReadOnly Property Balance() As Double
    Get
      Dim result As Double = 0.0
      Dim i As Integer
      For i = 0 To mTransactions.Count - 1
        result += CDbl(mTransactions(i))
      Next
      Return result
    End Get
  End Property
  Public Sub Add(ByVal amount As Double)
    mTransactions.Add(amount)
  End Sub
  Public Sub Subtract(ByVal amount As Double)
    mTransactions.Add(-amount)
  End Sub
End Class
Public Class MyMoney
  Inherits Money
  Public Overrides ReadOnly Property Balance() As Double
    Get
      Return MyBase.Balance - Print * 2
    End Get
  End Property
End Class
Module Test
  Sub Main()
    Dim acc1 As New Money()
    acc1.Add(200)
    acc1.Subtract(40)
    acc1.Add(30)
    Console.Write("count: {0}, ", acc1.Print)
    Console.WriteLine("balance: {0}", acc1.Balance)
    Dim acc2 As New MyMoney()
    acc2.Add(200)
    acc2.Subtract(40)
    acc2.Add(30)
    Console.Write("count: {0}, ", acc2.Print)
    Console.WriteLine("balance: {0}", acc2.Balance)
  End Sub
End Module
count: 3, balance: 190
count: 3, balance: 184

Interface Inherits Interface

Imports System
 Interface Printable
     Sub Read( )
     Sub Write(ByVal obj As Object)
     Property Status( ) As Integer
 End Interface "Printable
 Interface Zippable
     Sub Zip( )
     Sub Unzip( )
 End Interface "Zippable
 Interface Zippable2 
 Inherits Zippable
     Sub Email( )
 End Interface 
 Public Class Document 
 Implements Zippable2, Printable
   Public Sub New(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 "Read
     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 myStatus
         End Get
         Set(ByVal Value As Integer)
             myStatus = Value
         End Set
     End Property
     Public Sub Zip( ) Implements Zippable.Zip
         Console.WriteLine("Implementing Zip")
     End Sub
     Public Sub Unzip( ) Implements Zippable.Unzip
         Console.WriteLine("Implementing Unzip")
     End Sub
     Public Sub Email( ) Implements Zippable2.Email
         Console.WriteLine("Implementing Email")
     End Sub 
     Private myStatus As Integer = 0
 End Class "Document
 Class Tester
     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 Zippable2 Then
             Dim ilDoc As Zippable2 = doc
             Console.Write("Calling both Zippable and ")
             Console.WriteLine("Zippable2 methods...")
             ilDoc.Zip( )
             ilDoc.Email( )
         Else
             Console.WriteLine("Could not cast to Zippable2")
         End If
         If TypeOf doc Is Zippable Then
             Dim icDoc As Zippable = doc "
             Console.WriteLine( _
                "Treating the object as Zipible... ")
             icDoc.Zip( )
         Else
             Console.WriteLine("Could not cast to Zippable")
         End If
     End Sub
 End Class
Creating document with: Test Document
Implementing the Read Method for Printable
Calling both Zippable and Zippable2 methods...
Implementing Zip
Implementing Email
Treating the object as Zipible...
Implementing Zip

Interface with Property

Class Tester
   Shared Sub Main()
      Dim tree As New Plant(1976)
      Dim person As New Animal("B", "J", 1983)
      Dim iAgeArray As Markable() = New Markable(1) {}
      iAgeArray(0) = tree
      iAgeArray(1) = person
      Console.WriteLine(tree.ToString() & ": " & _
         tree.Name & vbCrLf & "Age is " & tree.Age)
      Console.WriteLine(person.ToString() & ": " & _
         person.Name & vbCrLf & "Age is " & person.Age)
      Dim ageReference As Markable
      For Each ageReference In iAgeArray
         Console.WriteLine(ageReference.Name & ": " & _
            "Age is " & ageReference.Age)
      Next
   End Sub " Main
End Class

Public Interface Markable
   ReadOnly Property Age() As Integer
   ReadOnly Property Name() As String
End Interface
Public Class Animal
   Implements Markable
   Private mYearBorn As Integer
   Private mFirstName As String
   Private mLastName As String
   Public Sub New(ByVal firstNameValue As String, _
      ByVal lastNameValue As String, _
      ByVal yearBornValue As Integer)
      mFirstName = firstNameValue
      mLastName = lastNameValue
      mYearBorn = yearBornValue
   End Sub " New
   ReadOnly Property Age() As Integer _
      Implements Markable.Age
      Get
         Return Date.Now.Year - mYearBorn
      End Get
   End Property " Age
   ReadOnly Property Name() As String _
      Implements Markable.Name
      Get
         Return mFirstName & " " & mLastName
      End Get
   End Property " Name
End Class
Public Class Plant
   Implements Markable
   Private mRings As Integer
   Public Sub New(ByVal yearPlanted As Integer)
      mRings = Date.Now.Year - yearPlanted
   End Sub " New
   Public Sub AddRing()
      mRings += 1
   End Sub " AddRing
   ReadOnly Property Age() As Integer _
      Implements Markable.Age
      Get
         Return mRings
      End Get
   End Property " Age
   ReadOnly Property Name() As String _
      Implements Markable.Name
      Get
         Return "Tree"
      End Get
   End Property " Name
End Class
Plant: Tree
Age is 31
Animal: B J
Age is 24
Tree: Age is 31
B J: Age is 24

Interface with two methods

Interface Speak
    Sub GoodMorning()
    Sub GoodEvening(ByVal CurrentDate As DateTime)
End Interface
Class English
    Implements Speak
    Public Sub GoodMorning() Implements Speak.GoodMorning
        Console.WriteLine("Good morning!")
    End Sub
    Public Sub GoodEvening(ByVal CurrentDate As DateTime) Implements Speak.GoodEvening
        Console.WriteLine("Good evening -- it is now " & CurrentDate)
    End Sub
End Class
Class Spanish
    Implements Speak
    Public Sub GoodMorning() Implements Speak.GoodMorning
        Console.WriteLine("Buenos Dias!")
        Console.WriteLine(Now())
    End Sub
    Public Sub GoodEvening(ByVal CurrentDate As DateTime) Implements Speak.GoodEvening
        Console.WriteLine("Buenas noches -- La fetcha y hora son " & CurrentDate)
    End Sub
End Class

Module Module1
    Sub Main()
        Dim Hello As New English()
        Dim Hola As New Spanish()
        Hello.GoodMorning()
        Hello.GoodEvening(Now())
        Hola.GoodMorning()
        Hola.GoodEvening(Now())
    End Sub
End Module
Good morning!
Good evening -- it is now 11/05/2007 9:29:46 PM
Buenos Dias!
11/05/2007 9:29:46 PM
Buenas noches -- La fetcha y hora son 11/05/2007 9:29:46 PM

One Class implements two interfaces

Option Strict On
 Imports System
     Interface Printable
         Sub Read( )
         Sub Write(ByVal obj As Object)
         Property Status( ) As Integer
     End Interface "Printable
     Interface Zippable
         Sub Zip( )
         Sub Unzip( )
     End Interface
     Public Class Document
         Implements Zippable, Printable
         Public Sub New(ByVal s As String)
             Console.WriteLine("Creating document with: {0}", s)
         End Sub "New
         Public Sub Read( ) Implements Printable.Read
             Console.WriteLine("Implementing the Read Method for Printable")
         End Sub "Read
         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 myStatus
             End Get
             Set(ByVal Value As Integer)
                 myStatus = Value
             End Set
         End Property
         Public Sub Zip( ) Implements Zippable.Zip
             Console.WriteLine("Implementing Zip")
         End Sub
         Public Sub Unzip( ) Implements Zippable.Unzip
             Console.WriteLine("Implementing Unzip")
         End Sub
         Private myStatus As Integer = 0
     End Class 
     Class Tester
         Shared Sub Main( )
             Dim doc As New Document("Test Document")
             doc.Status = -1
             doc.Read( )
             doc.Zip( )
             Console.WriteLine("Document Status: {0}", doc.Status)
         End Sub "Main
     End Class
Creating document with: Test Document
Implementing the Read Method for Printable
Implementing Zip
Document Status: -1

Public Sub aMethod() Implements Interface1.Method, Interface2.Method

Public Interface I1
    Sub Draw()
End Interface
Public Interface I2
    Sub Draw()
End Interface
Public Class Class1
    Implements I1, I2
    Public Sub foo() Implements I1.Draw, I2.Draw
    End Sub
End Class

Reimplement interface

Class BaseClass
    Implements IFormattable
    Implements IComparable
    Public Value As String
    Public Overridable Overloads Function ToString(ByVal _
      Format As String, ByVal Provider As IFormatProvider) _
      As String Implements IFormattable.ToString
        ToString = Value
    End Function
    Public Overridable Overloads Function CompareTo(ByVal A _
      As Object) As Integer Implements IComparable.rupareTo
        If (Value = A.Value) Then
            CompareTo = 0
        ElseIf (Value < A.Value) Then
            CompareTo = -1
        Else
            CompareTo = 1
        End If
    End Function
    Public Sub New(ByVal Value As String)
        Me.Value = Value
    End Sub
End Class
Class DerivedClass
    Inherits BaseClass
    Public Overrides Function ToString(ByVal _
      Format As String, ByVal Provider As IFormatProvider) _
      As String
        ToString = UCase(Value)
    End Function
    Public Sub New(ByVal Value As String)
        MyBase.New(Value)
    End Sub
End Class
Module Module1
    Sub Main()
        Dim A As New BaseClass("Hello")
        Dim B As New DerivedClass("Hi")
        Console.WriteLine(A)
        Console.WriteLine(B)
        Console.WriteLine(A.rupareTo(B))
    End Sub
End Module
Hello
HI
-1

Two classes implement one interface

public class Test
   public Shared Sub Main
        Dim rect As New Rectangle()
        Dim trap As New Trapezoid()
        rect.Draw()
        trap.Draw()
   End Sub
End class
Public Interface IShape
    Function Draw() As String
End Interface
Public Class Rectangle
    Implements IShape
    Public Function Draw() As String Implements IShape.Draw
        Return "Drawing Rectangle"
    End Function
End Class
Public Class Trapezoid
    Implements IShape
    Public Function Draw() As String Implements IShape.Draw
        Return "Drawing Trapezoid"
    End Function
End Class