Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
63 / 54 / 14
Регистрация: 22.10.2012
Сообщений: 257
1

Как преобразовать класс определенного типа в класс другого типа с входным типом

13.06.2019, 20:24. Просмотров 1828. Ответов 3
Метки нет (Все метки)

Создал 2 класса, которые служат аргументами для событий
Кликните здесь для просмотра всего текста
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Class ItemAddedEventArgs(Of T)
    Sub New(Item As T)
        Me.Item = Item
    End Sub
    Public Property Item As T
End Class
 
Public Class ItemAddedEventArgs
    Sub New(Item As Object)
        Me.Item = Item
    End Sub
    Public Property Item As Object
End Class

теперь мне нужно чтобы другой метод мог принимать значения как с входным типом Т, так и без него
оператор преобразования в класс без входного типа получился
Кликните здесь для просмотра всего текста
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Class ItemAddedEventArgs(Of T)
    Sub New(Item As T)
        Me.Item = Item
    End Sub
    Public Property Item As T
    Public Shared Widening Operator CType(obj As ItemAddedEventArgs(Of T)) As ItemAddedEventArgs
        Try
            Return New ItemAddedEventArgs(obj.Item)
        Catch ex As Exception
            Throw ex
        End Try
    End Operator
End Class

но вот преобразовать в класс с входным типом мне не удается
по логике я думал получился вот так
Кликните здесь для просмотра всего текста
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Class ItemAddedEventArgs
    Sub New(Item As Object)
        Me.Item = Item
    End Sub
    Public Property Item As Object
    Public Shared Narrowing Operator CType(obj As ItemAddedEventArgs) As ItemAddedEventArgs(Of T)
        Try
            Return New ItemAddedEventArgs(Of T)(obj.Item)
        Catch ex As Exception
            Throw ex
        End Try
    End Operator
End Class

но в строках 6 и 8 тип Т подчеркнут Тип "Т" не определен

в общем требуется чтобы в таком вот коде небыло ошибок
vb.net
1
2
        Dim obj1 As ItemAddedEventArgs = New ItemAddedEventArgs(Of String)("Привет")
        Dim obj2 As ItemAddedEventArgs(Of String) = New ItemAddedEventArgs("Привет")
строка 1 работает, но строка 2 Error
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2019, 20:24
Ответы с готовыми решениями:

Обобщенный класс с параметром типа (с ограничением для параметра типа)
• (4б). Создать обобщенный класс с параметром типа (с ограничением для параметра типа). В...

Класс объявление с элементом типа класс Текст
Необработанное исключение в "0x770015de" в "FAQ.exe": 0xC0000005: Нарушение прав доступа при записи...

Как преобразовать число типа int в строку типа string без методов-конвертов на C#?
В общем, все что выше написано. Пишу в Visual Studio на C#. Преобразовать без конвертирования,...

Создать класс Mystring, предназначенный для хранения строки из символов типа char. Класс имеет метод для определения дли
Создать класс Mystring, предназначенный для хранения строки из символов типа char. Класс имеет...

3
63 / 54 / 14
Регистрация: 22.10.2012
Сообщений: 257
23.06.2019, 14:04  [ТС] 2
вопрос все еще не решен, тема актуальна
0
Супер-модератор
Эксперт .NET
11979 / 9999 / 4177
Регистрация: 17.03.2014
Сообщений: 20,076
Записей в блоге: 1
23.06.2019, 16:45 3
kritjara, так не получится сделать. Оператору преобразования типа внутри ItemAddedEventArgs неоткуда получить имя тип-параметра. Зачем понадобилось иметь два типа? Почему нельзя использовать только один класс?

P.S. *EventArgs классы принято наследовать от System.EventArgs
1
63 / 54 / 14
Регистрация: 22.10.2012
Сообщений: 257
24.06.2019, 13:49  [ТС] 4
OwenGlendower, решение найдено и это сделать возможно, оказалось все очень банально
нужно описать оператор преобразования в том же классе
в итоге описание преобразования в обе стороны будут присутствовать в одном классе, а в другом классе - ни одного
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Class ItemAddedEventArgs(Of T)
    Sub New(Item As T)
        Me.Item = Item
    End Sub
    Public Property Item As T
    Public Shared Widening Operator CType(obj As ItemAddedEventArgs(Of T)) As ItemAddedEventArgs
        Try
            Return New ItemAddedEventArgs(obj.Item)
        Catch ex As Exception
            Throw ex
        End Try
    End Operator
    Public Shared Widening Operator CType(obj As ItemAddedEventArgs) As ItemAddedEventArgs(Of T)
        Try
            Return New ItemAddedEventArgs(Of T)(obj.Item)
        Catch ex As Exception
            Throw ex
        End Try
    End Operator
End Class
Добавлено через 8 минут
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Зачем понадобилось иметь два типа?
удобно ведь при кодинге знать какой тип передается делегатом
и если оставить класс без входного типа, то каждый раз придется состав аргумента преобразовывать в нужный тип, да еще и ошибиться будет легче
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2019, 13:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как создавать имена id объектов типа Класс?
Есть например класс: public class People { public string first_name, second_name,...

Как преобразовать класс из динамически сгенерированного кода в локальный класс?
Исходные данные: Форма, на ней кнопка, по нажатию на которую компилируется программа, совершает...

Как преобразовать указатель на класс к указателю на асбтрактный класс?
Но тут есть одна тонкость- два промежуточных класса. Вот код, надеюсь всё из него понятно....

Как в класс модуле сделать новый обьект типа ListBox?
Как в класс модуле сделать новый обьект типа ListBox? dim List as ListBox Set List =...

Как вызвать из одного класса (для метода типа void) метод типа boolean другого класса?
ребят, только учусь и конечно, вопросов возникает много. ситуация вот в чем. есть массив. я должна...

Класс А не принимает член-переменную с типом класс Б
Разработка ведётся в Visual Studio 2010 с использованием MFC Есть некий класс AnswersStatistic,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.