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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ограничить тип аргумента генерикса? 
:(
    Опции темы
Dims
Дата 3.11.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Можно ли указать, что аргумент генерикса должен быть подтипом определённого типа или имплементить определённый интерфейс?

Например, можно ли ограничить, чтобы аргументы были только числовыми типами?
PM MAIL   Вверх
Bogdan1024
Дата 3.11.2008, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

public class MyGenericClass<T> where T:IComparable { }




--------------------
user posted image
PM MAIL   Вверх
Dims
Дата 3.11.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Пасиб.
PM MAIL   Вверх
Dims
Дата 4.11.2008, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А если надо ограничить именно до числового типа, например

Код

class Vector<T>
    {
        private T x, y;
        public double Length
        {
            get
            {
                Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2));
            }

        }
    }


ругается. Как сделать?
PM MAIL   Вверх
Bogdan1024
Дата 4.11.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Тогда тебе не нужны дженериксы.
int, uint, single и много чего другого неявно преобразуются в дабл и т.д..


--------------------
user posted image
PM MAIL   Вверх
Dims
Дата 4.11.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Bogdan1024 @  4.11.2008,  18:03 Найти цитируемый пост)
int, uint, single и много чего другого неявно преобразуются в дабл

Это точно?
PM MAIL   Вверх
PashaPash
Дата 4.11.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Dims @  4.11.2008,  18:07 Найти цитируемый пост)
Это точно? 

Не совсем. С варнингом про потерю точности. 


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


Эксперт
***


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

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



Цитата
Это точно? 

Не, в памяти int хранится как int, если ты об этом smile
Почитай про:
Implicit Numeric Conversions Table
Тупо всё преобразуется в decimal. Большинство математических функций могут его принять в качестве параметра.


--------------------
user posted image
PM MAIL   Вверх
Dims
Дата 4.11.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Насколько я понимаю, implicit conversion это просто неявное преобразование. То есть, например, в этой таблице есть строка From float To double. Это значит, что я могу писать

Код

double a = 2.0;
float b = 3.0f;
a = b;


и мне не надо писать так

Код

a = (double) b;


то есть, преобразовывать явно.

Но это вовсе не значит, что при вычислении 2.0f + 3.1f аргументы сперва преобразуются в double или decimal.

Короче, наверное, нельзя.

Добавлено через 1 минуту и 23 секунды
Цитата(PashaPash @  4.11.2008,  18:12 Найти цитируемый пост)
Не совсем. С варнингом про потерю точности.  

Можно пример?
PM MAIL   Вверх
Partizan
Дата 5.11.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



Цитата

Можно пример?


Очевидно, что в результате преобразования double -> float или double -> int произойдёт потеря точности...


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


Эксперт
***


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

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



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

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


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

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


 




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


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

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