Public Enum WordFunction
Noun = 1
Verb = 2
Pronoun = 4
Adverb = 8
Adjective = 16
Preposition = 32
Phrase = 64
End Enum
Public Enum WordGender
notApplicable = 0
Masculine = 1
Feminine = 2
Neuter = 3
End Enum
Private m_englishWord As String
Private m_germanWord As String
Private m_germanGender As VocabularyWord.WordGender
Private m_wordFunction As VocabularyWord.WordFunction
Public ReadOnly Property EnglishWord() As String
Get
Return m_englishWord
End Get
End Property
Public ReadOnly Property GermanWord() As String
Get
Return m_germanWord
End Get
End Property
Public ReadOnly Property getWordFunction() As WordFunction
Get
Return m_wordFunction
End Get
End Property
Public ReadOnly Property getWordGender() As WordGender
Get
Return m_germanGender
End Get
End Property
'-----------------------------------------------------------------
'Возвращает слово на немецком языке, которому предшествует артикль
'(например, 'der', 'die', 'das'), если он существует
'-----------------------------------------------------------------
Public ReadOnly Property GermanWordWithArticleIfExists() As String
Get
If (m_germanGender = WordGender.notApplicable) Then
Return Me.GermanWord
End If
Return Me.GenderArticle + " " + Me.GermanWord
End Get
End Property
Public ReadOnly Property GenderArticle() As String
Get
Select Case (m_germanGender)
Case WordGender.Masculine
Return "der"
Case WordGender.Feminine
Return "die"
Case WordGender.Neuter
Return "das"
End Select
Return ""
End Get
End Property
Public Sub New(ByVal enlgishWord As String, ByVal germanWord _
As String, ByVal germanGender As WordGender, _
ByVal wordFunction As WordFunction)
m_englishWord = enlgishWord
m_germanWord = germanWord
m_germanGender = germanGender
m_wordFunction = wordFunction
End Sub
End Class
Примеры к главе 15 (передача данных)
Этот код представляет собой всего лишь последовательность вызовов функций. Программистам на VB будет несложно написать его, используя в качестве образца код на C#.
Листинг 15.2. Имитация сбоев при передаче данных для тестирования приложения'Флаги условной компиляции для нашего инструментированного кода
#Const DEBUG_SIMULATE_FAILURES = 1 'Имитировать сбои
'#Const DEBUG_SIMULATE_FAILURES = 0 'Не имитировать сбои
'-----------------------------------------------------------------
'Глобальная переменная, которую мы хотим использовать для указания
'необходимости генерации исключений в процессе передачи данных
'-----------------------------------------------------------------
#If DEBUG_SIMULATE_FAILURES <> 0 Then
'Переменная для хранения информация о следующем сбое
Shared g_failureCode As SimulatedFailures = _
SimulatedFailures.noFailurePending
'Список сбоев, которые мы хотим имитировать
public enum SimulatedFailures
noFailurePending 'No test failures pending
'Имитируемые сбои:
failInNextWriteSocketCode
failInNextWebServiceCall
failInNextFileIODuringFileOpen
failInNextFileIODuringFileRead
'и так далее
End Enum
#End If 'DEBUG_SIMULATE_FAILURES
'---------------------------------------------------
'Функция, которую мы используем для передачи данных.
'---------------------------------------------------
Private Sub writeDataToSocket( _
ByVal mySocket As System.Net.Sockets.Socket, _
ByVal dataToSend() As Byte)
'------------------------------------------------------------------
'Этот код следует компилировать лишь при тестировании сетевых сбоев
'------------------------------------------------------------------
#If DEBUG_SIMULATE_FAILURES <> 0 Then
'Если это сбой, который мы хотим тестировать, генерировать исключение
If (g_failureCode = _
SimulatedFailures.failInNextWriteSocketCode) Then
'Сбросить этот сбой, чтобы он не возник
'при следующем вызове этой функции
g_failureCode = SimulatedFailures.noFailurePending
Throw New Exception("Test communications failure: " + _
g_failureCode.ToString())
End If
#End If
'Передать данные обычным образом.
mySocket.Send(dataToSend)
End Sub
Листинг 15.3. Тестовый код, который необходимо поместить в класс формы для тестирования передачи и приема данных посредством механизма IrDA'Имя, которое мы хотим присвоить сокету IrDA
Const myIrDASocketName As String = "IrDaTestFileTransmit"
Private Sub buttonTestFileSend_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles buttonTestFileSend.Click
'Создать простой текстовый файл, который мы хотим передать
Const fileName As String = "\myTestSendFile.txt"
Dim textFileStream As System.IO.StreamWriter
textFileStream = System.IO.File.CreateText(fileName)
textFileStream.WriteLine("Today...")
textFileStream.WriteLine("is а nice day")
textFileStream.WriteLine("to go swim")
textFileStream.WriteLine("in the lake")
textFileStream.Close()
Dim irdaFileSender As IrDAFileSend
irdaFileSender = New IrDAFileSend(fileName, myIrDASocketName)
'Имеется 2 режима: 1 - Sync (синхронный), 2 — Async (асинхронный)