Может ли кто-нибудь указать мне на интерфейс, который мне нужно реализовать, чтобы заставить базовые математические операторы (т. Е. +, -, *, /) функционировать на пользовательском типе?Реализовать математические функции в пользовательских C# типа?
3
A
ответ
17
Вы должны использовать operator overloading.
public struct YourClass
{
public int Value;
public static YourClass operator +(YourClass yc1, YourClass yc2)
{
return new YourClass() { Value = yc1.Value + yc2.Value };
}
}
2
Вам нужно перегрузить операторов по типу.
// let user add matrices
public static CustomType operator +(CustomType mat1, CustomType mat2)
{
}
3
Вы можете найти хороший пример оператора перегрузки для пользовательских типов here.
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);
}
}
5
public static T operator *(T a, T b)
{
// TODO
}
И так далее для других операторов.
2
Что вы ищете, это не интерфейс, а Operator Overloading. В принципе, можно определить статический метод следующим образом:
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;
1
Вот статья MSDN по операторам и доминирующими в C#: http://msdn.microsoft.com/en-us/library/s53ehcz3(loband).aspx
Смежные вопросы
- 1. C#: Математические функции
- 2. C# Математические функции
- 3. C: Математические функции?
- 4. Цель-C. Математические функции
- 5. Общие математические функции в C++
- 6. Пользовательские математические функции и заданные математические функции?
- 7. Математические функции в OMNet ++
- 8. Математические функции в Logstash
- 9. Математические функции в Swift
- 10. C++ математические функции проблемы (под Linux)
- 11. Простые математические функции Swift
- 12. Как реализовать функции STL для пользовательских классов?
- 13. Написание пользовательских псевдонимов типа C++ 14 типа
- 14. xPath и математические функции
- 15. Oracle математические функции
- 16. Математические ошибки в C#
- 17. Математические функции в угловых привязках2
- 18. Математические функции в функциональном программировании
- 19. Математические операции в аргументе функции
- 20. Как исправить математические функции
- 21. Визуализировать математические функции
- 22. Математические операции на произвольных объектов в C#
- 23. Математические функции для GPS-координат
- 24. Scala: Математические функции не методы
- 25. Как реализовать виртуальные функции C++ в C
- 26. Преобразование типа DWORD без CRT, реализация пользовательских Sprintf функции()
- 27. Реализация функции вероятности типа индикатора в C
- 28. Как реализовать селектор типа метода в C++?
- 29. Как реализовать структуры типа C++ в python?
- 30. Используя стандартные математические функции с аргументами шаблона в C++
В общем , если вы выполняете перегрузку оператора, вы, вероятно, имеете дело с типом значения, а не ссылочным типом, который должен (потенциально) быть базовым классом для других типов, поэтому вам следует рассмотреть возможность использования структуры, а не класса для лежащий в основе Тип. –
Чарльз, спасибо за это предложение, я упустил это. Я редактировал код. –