[C#] Арифметический интерфейс
От: Аноним  
Дата: 21.06.08 08:21
Оценка:
Вопрос довольно простой, но не нашел на него ответа.
Какой интерфейс отвечает за наличие арифметических операций ( /, *, -, + )

Интересует его использование как ограничителя для параметра шаблона:

class CMyClass<T> where T:IComparable, IAriphmetic
{
 ...
 T obj;
 ...
 internal void Func( T par )
 {
   T temp = par * obj / ( par - obj ) + obj;
   ...
 }
 ...
}



PS: если такого интерфейса не предусмотренно( что было бы странно ), то как его реализовать для моих целей.


interface IAriphmetic<T>
{
  T operator+( T par );
  T operator-( T par );
  T operator/( T par );
  T operator*( T par );
}



Во-первых не компилится. Во-вторых, как я его впишу в условие, если ему нужен параметр ?
c#
Re: [C#] Арифметический интерфейс
От: _nn_ www.nemerleweb.com
Дата: 21.06.08 10:39
Оценка:
Здравствуйте, iLych, Вы писали:

Для начала стоит почитать статью Generics
Автор(ы): Эндрю Троелсен
Дата: 30.09.2006
Глава из книги "Язык программирования C# 2005 (Си Шарп) и платформа .NET 2.0 "
[q]С появлением .NET 2.0 язык программирования C# стал поддерживать новую возможность CTS (Common Type System — общая система типов), названную обобщениями (generics). Упрощенно говоря, обобщения обеспечивают программисту возможность определения “заполнителей” (формально называемых параметрами типа) для аргументов методов и определений типов, которые будут конкретизированы во время вызова обобщенного метода или при создании обобщенного типа.[/q]
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: [C#] Арифметический интерфейс
От: nikov США http://www.linkedin.com/in/nikov
Дата: 21.06.08 11:18
Оценка:
Здравствуйте, iLych, Вы писали:

L>Какой интерфейс отвечает за наличие арифметических операций ( /, *, -, + )

L>PS: если такого интерфейса не предусмотренно( что было бы странно ), то как его реализовать для моих целей.

Такой интерфейс не существует и самому определить его невозможно. К сожалению, generics не поддерживают обобщенные арифметические операции. Но люди придумали всякие обходные пути, например здесь.
Re: [C#] Арифметический интерфейс
От: Блудов Павел Россия  
Дата: 23.06.08 10:50
Оценка:
Здравствуйте, iLych, Вы писали:

L>Какой интерфейс отвечает за наличие арифметических операций ( /, *, -, + )

Никакой. Но можно взять код здесь и включить его в свой проект.
Пример использования:
[Test]
public void IntTest()
{
    Assert.AreEqual(579,   Operator<int>.Addition   (123, 456));
    Assert.AreEqual(-333,  Operator<int>.Subtraction(123, 456));

    Assert.AreEqual(56088, Operator<int>.Multiply(123, 456));
    Assert.AreEqual(0,     Operator<int>.Division(123, 456));
    Assert.AreEqual(123,   Operator<int>.Modulus (123, 456));


    Assert.AreEqual(72,    Operator<int>.BitwiseAnd (123, 456));
    Assert.AreEqual(507,   Operator<int>.BitwiseOr  (123, 456));
    Assert.AreEqual(435,   Operator<int>.ExclusiveOr(123, 456));

    Assert.AreEqual(-123,  Operator<int>.UnaryNegation (123));
    Assert.AreEqual(-124,  Operator<int>.OnesComplement(123));

    Assert.IsTrue(Operator<int>.Equality          (123, 123));
    Assert.IsTrue(Operator<int>.Inequality        (123, 456));
    Assert.IsTrue(Operator<int>.GreaterThan       (123, -56));
    Assert.IsTrue(Operator<int>.GreaterThanOrEqual(123, 123));
    Assert.IsTrue(Operator<int>.LessThan          (123, 456));
    Assert.IsTrue(Operator<int>.LessThanOrEqual   (-23, 123));
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1090>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.