Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как проверить экземпляр на следование интерфейсу? Добавлено: 22.03.07 14:44  

Автор вопроса:  Neco | Web-сайт: neco.pisem.net | ICQ: 247906854 
Есть куча форм разных классов, часть из этих классов следуют определённому интерфейсу. Теперь надо проверить следует ли форма этому интерфейсу и если следует, то вызвать метод прописанный в этом интерфейсе.
Счас делаю приведение внутри блока 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-сайт: neco.pisem.net
 Профиль | | #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-сайт: neco.pisem.net
 Профиль | | #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
http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.html

Ошибочка...

greeting = IIf(age < 20, "What's up?", "Hello";)
greeting = age < 20 ? "What's up?" : "Hello";


Это два разных куска кода :(
В VB .NET IIf - функция (унаследования, кстати, еще от VB6), в C# - языковая конструкция.

Нельзя написать в VB .NET:

Dim Name As String = IIf(Person Is Nothing, "No Person", Person.Name)


так как получим NullReferenceException - при передаче в функцию будет выполнен Person.Name, а поскольку Person может быть Nothing'ом, собственно и произойдет исключение.

В C# же можно написать и это будет работать:
string Name = (Person == null) ? "No Person" : Person.Name


Несмотря на то, что мне C# очень не нравится (сегодня переписывал один Framework на С# для проекта, написаного на C#, за час переписал пару файлов, плюнул и переписал весь проект на VB .NET, ибо все пальца поломал), имено эта фича C# мне очень нравится.
Не могли блин в VB аналогичную игрушку вставить :(

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам