Страница: 1 |
Страница: 1 |
Вопрос: Как проверить экземпляр на следование интерфейсу?
Добавлено: 22.03.07 14:44
Автор вопроса: Neco | Web-сайт:
Есть куча форм разных классов, часть из этих классов следуют определённому интерфейсу. Теперь надо проверить следует ли форма этому интерфейсу и если следует, то вызвать метод прописанный в этом интерфейсе.
Счас делаю приведение внутри блока try catch:
[CODE]Public Class Form1
Private Interface MyFace
Sub MySub()
End Interface
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim some_object As Object = New Object
' ==================
Dim test As MyFace = Nothing
Try
test = CType(some_object, MyFace)
Catch ex As Exception
End Try
If test IsNot Nothing Then
Debug.Write("implement")
test.MySub()
Else
Debug.Write("not implement")
End If
' ==================
End Sub
End Class
CODE]
Но как-то это тупо - должен же быть какой-то нормальный способ проверить это.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 22.03.07 15:00
TryCast?
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 22.03.07 15:08
суть таже, за исключением того, что ты не получишь Exception и соответственно от блока try-catch можно отказаться..
Номер ответа: 3
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #3
Добавлено: 22.03.07 15:20
Большое пасиба! )))
То, что нужно!
P.S. Для интересующихся - в C# это выглядит как some_object as MyFace
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 22.03.07 18:47
If TypeOf some_object Is MyFace Then...
PS
Вообще ж есть стандартная нотификация, интерфейсы начинаются на I
Номер ответа: 5
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #5
Добавлено: 22.03.07 19:04
Ещё лучше! )))
тогда на шарпе это вапще как If some_object is MyFace ....
кстати, вот нашёл полезную ссылку для переходящих на соседний язык
http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.html
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 22.03.07 22:38
Ошибочка...
greeting = age < 20 ? "What's up?" : "Hello";
Это два разных куска кода
В VB .NET IIf - функция (унаследования, кстати, еще от VB6), в C# - языковая конструкция.
Нельзя написать в VB .NET:
так как получим NullReferenceException - при передаче в функцию будет выполнен Person.Name, а поскольку Person может быть Nothing'ом, собственно и произойдет исключение.
В C# же можно написать и это будет работать:
Несмотря на то, что мне C# очень не нравится (сегодня переписывал один Framework на С# для проекта, написаного на C#, за час переписал пару файлов, плюнул и переписал весь проект на VB .NET, ибо все пальца поломал), имено эта фича C# мне очень нравится.
Не могли блин в VB аналогичную игрушку вставить