Недавно я узнал о делегатах в VB. NET, поэтому я пытаюсь провести несколько тестов, чтобы ознакомиться с тем, как они работают. Сначала мне удалось создать его и указать на функцию, которая просто выводит на экран следующее:
Public Delegate Function ByteDelegate() As Byte
Sub Main()
Dim testDelegate As ByteDelegate = AddressOf PrintHello
otherDelegate()
End Sub
Public Function PrintHello()
Console.WriteLine("Hello!")
Return &H0
End Function
Затем я хотел посмотреть, могу ли я проверить, действительно ли один из этих делегатов укажите на имеющуюся у меня функцию PrintHello (). Я пробовал делать следующее:
If test.operate.Method = otherDelegate.Method
If test.operate.Method.Name.CompareTo(otherDelegate.Method.Name)
Но ни один из них, похоже, не дает достоверных результатов, я искал в Интернете и пока не нашел ничего полезного, и я изо всех сил пытаюсь понять как я должен поступить так, чтобы любая помощь была бы оценена. Поскольку моим функциям нужны возвращаемые типы, я придерживался использования Fun c (Of Byte), поскольку действия по-прежнему возвращают false при сравнении, и из того, что мне сказали, я должен использовать их только для Subs.
У меня есть структура под названием INSTRUCTION, которая содержит действие и строку, например:
Private Structure INSTRUCTION
Public operate As Func(Of Byte)
Public text As String
Public Sub New(_operate As Func(Of Byte), _text As String)
operate = _operate
text = _text
End Sub
End Structure
Затем я создаю тип INSTRUCTION, который обращается к моей функции PrintHello, а также выполняю другое действие с той же функцией для сравните:
Dim test As New INSTRUCTION(AddressOf PrintHello, "Other text.")
Dim otherFunction As Func(Of Byte) = AddressOf PrintHello
Когда я пытаюсь сравнить эти действия с
otherFunction.Equals(test.operate)
, он просто возвращает false.
Я не понимаю, что может происходить в все, я не думаю, что что-то когда-либо так ставило меня в тупик.