Вопрос довольно простой, но не нашел на него ответа.
Какой интерфейс отвечает за наличие арифметических операций ( /, *, -, + )
Интересует его использование как ограничителя для параметра шаблона:
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 );
}
Во-первых не компилится. Во-вторых, как я его впишу в условие, если ему нужен параметр ?
Здравствуйте, iLych, Вы писали:
L>Какой интерфейс отвечает за наличие арифметических операций ( /, *, -, + )
L>PS: если такого интерфейса не предусмотренно( что было бы странно ), то как его реализовать для моих целей.
Такой интерфейс не существует и самому определить его невозможно. К сожалению, generics не поддерживают обобщенные арифметические операции. Но люди придумали всякие обходные пути, например
здесь.
Здравствуйте, 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>>