Реализовать математические функции в пользовательском типе C #? - PullRequest
3 голосов
/ 08 октября 2009

Может ли кто-нибудь указать мне на интерфейс, который мне нужно реализовать, чтобы заставить базовые математические операторы (т.е. +, -, *, /) функционировать на пользовательском типе?

Ответы [ 6 ]

17 голосов
/ 08 октября 2009

Вы должны использовать оператор перегрузки.

public struct YourClass
{
    public int Value;

   public static YourClass operator +(YourClass yc1, YourClass yc2) 
   {
      return new YourClass() { Value = yc1.Value + yc2.Value };
   }

}
5 голосов
/ 08 октября 2009
public static T operator *(T a, T b)
{
   // TODO
}

И так далее для других операторов.

3 голосов
/ 08 октября 2009

Хороший пример перегрузки операторов для пользовательских типов можно найти здесь .

public struct Complex 
{
   public int real;
   public int imaginary;

   public Complex(int real, int imaginary) 
   {
      this.real = real;
      this.imaginary = imaginary;
   }

   // Declare which operator to overload (+), the types 
   // that can be added (two Complex objects), and the 
   // return type (Complex):
   public static Complex operator +(Complex c1, Complex c2) 
   {
      return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
   }
}
2 голосов
/ 08 октября 2009

Вы ищете не интерфейс, а Перегрузка оператора . По сути, вы определяете статический метод следующим образом:

public static MyClass operator+(MyClass first, MyClass second)
{
    // This is where you combine first and second into a meaningful value.
}

, после чего вы можете добавить MyClasses вместе:

MyClass first = new MyClass();
MyClass second = new MyClass();
MyClass result = first + second;
2 голосов
/ 08 октября 2009

Необходимо перегрузить операторы по типу.

// let user add matrices
    public static CustomType operator +(CustomType mat1, CustomType mat2)
    {
    }
1 голос
/ 08 октября 2009

Вот статья MSDN об операторах и переопределении в C #: http://msdn.microsoft.com/en-us/library/s53ehcz3(loband).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...