Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Один метод с разными типами параметров 2 
:(
    Опции темы
href
Дата 26.5.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



Подскажите, пожалуйста, как быть? Объявляю метод:
Код

public class MessageProcessing<T> : MainForm
{
    public void ParseMessage(T sms) 
    {                
        MessageBox.Show(sms.From.Address.ToString());
    }
}
 

вызываю его так:
Код

MessageProcessing<Microsoft.WindowsMobile.PocketOutlook.SmsMessage> MessageProc = new MessageProcessing<Microsoft.WindowsMobile.PocketOutlook.SmsMessage>();
MessageProc.ParseMessage(sms);


или так:
Код

MessageProcessing<InTheHand.WindowsMobile.PocketOutlook.SmsMessage> MessageProc = new MessageProcessing<InTheHand.WindowsMobile.PocketOutlook.SmsMessage>();
MessageProc.ParseMessage(sms);


VisualStudio программу не компиляет, а подсвечивает From в sms.From.Address.ToString(), пишет
'T' does not contain a definition for 'From' and no extension method 'From' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?)"  smile 


Это сообщение отредактировал(а) href - 26.5.2009, 15:09
PM MAIL WWW ICQ Skype GTalk   Вверх
Partizan
Дата 26.5.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



href, не удивительно...

Вы же уже спрашивали в соседнем топике как лучше сделать - сделайте как Вам посоветовали там.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
href
Дата 26.5.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



Цитата(Partizan @ 26.5.2009,  16:10)
href, не удивительно...

почему?

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

Это сообщение отредактировал(а) href - 26.5.2009, 16:18
PM MAIL WWW ICQ Skype GTalk   Вверх
Partizan
Дата 26.5.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



href, 

потому, что T в данном случае - это вообще любой тип, а не один из двух...
потому, что дженерики в .NET являются динамическими типами и специфицируются в рантайме(в отличие от шаблонов C++, которые специфицируются в compile-time)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Alekz
Дата 26.5.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 5.2.2008
Где: Запорожье, Украин а

Репутация: 1
Всего: 2



Адаптер.
Или рефлексия )))
PM MAIL   Вверх
Wanderer2019
Дата 27.5.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 2
Всего: 17



Цитата(href @  26.5.2009,  14:15 Найти цитируемый пост)
UPD. Вернее, как можно заставить программу работать в такой ситуации (абстрагируясь от того, что можно решить задачу другим, менее универсальным способом)?


В данном случае пример не является "более универсальным способом". 

Исходя из того, что в функции ParseMessage вы обращаетесь к  уникальным полям класса (например From), можно сделать вывод, что ничего кроме объекта типа SMS в функцию передать нельзя. Соответственно это ни есть джинерик. Именно об этом и ругается компилятор.

Это сообщение отредактировал(а) Wanderer2019 - 27.5.2009, 17:50
PM ICQ MSN   Вверх
Лен
Дата 28.5.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 20.1.2009

Репутация: нет
Всего: нет



Сделайте generic более узким.
Код

public class MessageProcessing<T> : MainForm

дополните строкой
Код

where T : Microsoft.WindowsMobile.PocketOutlook.SmsMessage

или (намного лучше)
Код

where T : SomeClass
,
где SomeClass - класс-предок Microsoft.WindowsMobile.PocketOutlook.SmsMessage и который имеет свойство From.
PM MAIL   Вверх
PashaPash
Дата 28.5.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Лен, у топикастера 2 разных класса SMS, с одинаковыми методами, но без общего предка или интерфейса. и он всячески пытается написать для них общий код.


--------------------
PM MAIL WWW   Вверх
jonie
Дата 28.5.2009, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



он хочет чета типа того?
Код

        class A
        {
            public string  name
            {
                get{ return "A";}
            }
        }

        class B
        {
            public string name
            {
                get { return "B"; }
            }
        }

        interface ISms
        {
            string name {get;}
        }

        class AA :A, ISms{}
        class BB :B, ISms{ }

        class SuperSMS<T> where T:ISms
        {
            public void PrintNameOfT(T t)
            {
                Console.WriteLine(t.name);
            }
        }

        static void Main(string[] args)
        {
            SuperSMS<AA> ams = new SuperSMS<AA>();
            ams.PrintNameOfT(new AA());
  
            SuperSMS<BB> ams = new SuperSMS<BB>();
            ams.PrintNameOfT(new BB());
         }
(собственно адаптер) чтоли?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
PashaPash
Дата 28.5.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



jonie, наверное да, но адаптер уже упоминали - наверное, не подошел. Еще варианты? smile


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0564 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.