2010-02-12 2 views
2

Я хотел бы объявить общий класс Простой где метод, называемый Сложение бы две общие переменные и добавить их вместе с помощью + оператора. Я думал, что я мог бы сделать это, давая класс Simple следующее ограничение:ограничения, общие переменные и арифметические операторы

class Simple<T> where T: int 
{ 
    public T Addition(T firstInt, T secondInt) 
    { 
     return firstInt + secondInt; 
    } 
} 

Я подозреваю, ошибка что-то делать с дженерики только имеющие следующие пять типов ограничений - ИмяКласса, класс, структура, InterfaceName, новый ()? Таким образом, почему не generics также поддерживают StructureName тип ограничения? Таким образом, мы могли бы применить арифметические операторы к общим переменным ?!

Thanx

ответ

3

Ограничение связи StructName не имеет смысла, поскольку вы не можете наследовать от типов значений.

Если вы что-то вроде class Simple<T> where T : int вы могли только экземпляр Simple<T> с T = int, типа не наследует от int или любого другого типа, значения этого вопроса.

C# (CLR) не хватает других языков, как type classes, один популярный механизм для обработки перегрузки оператора без жестко закодированной механики компилятора (как на C#).

+0

Благодарю всех вас за помощь. :) – AspOnMyNet

2

Там нет смысла в сдерживании универсального типа для конкретного структуры, так как типов структуры не может быть унаследован. Это будет идентична записи:

class Simple 
{ 
    public int Addition(int firstInt, int secondInt) 
    { 
     return firstInt + secondInt; 
    } 
} 

К сожалению, с поддержкой в ​​IArithmetic interface, общие типы с математическими операциями трудно поддерживать. Если вы хотите увидеть один подход для основанных на математике математических операторов, посмотрите на Generic Operators in MiscUtil.

1

Вы ограничиваете T до int. Это не разумная вещь, поскольку существует только один тип int; поэтому вы можете прямо написать int, если хотите, int.

Если вы не сдерживаете T, вы не можете использовать оператор +, так как на объекте определен оператор +.

C# generics не являются шаблонами C++.