Zbadałem kod źródłowy C#. I natknąłem się na ciekawą wzmiankę o interfejsie IArithmetic<T>
. Na przykład Int32
, Double
zawiera komentowane implementacje interfejsu IArithmetic
. Jestem zainteresowany tymi szczegółami. Jak zrozumiałem, jest to próba dodania "wsparcia" operacji arytmetycznych. Ale dlaczego są komentowane? Czy to zły sposób dodawania wspierających ogólnych "operatorów"?IArithmetic <T> w C#
Odpowiedz
Zostało to prawdopodobnie złomowane ze względu na wydajność i niezbyt dużą użyteczność.
Prymitywne typy wspierające operacje arytmetyczne za pośrednictwem interfejsu to naprawdę mało atrakcyjny scenariusz; Wydajność byłaby straszna w porównaniu do zwykłego korzystania z samego typu wartości ze względu na niezbędne boksowanie i rozpakowywanie.
Jakie są możliwe zastosowania? Cóż, pierwszą rzeczą, o której warto pamiętać, byłby następujący scenariusz:
public Matrix<T> where T: IArithmetic<T>
lub niektóre z takich. Chociaż może to być interesujące ze względów wydajnościowych, prawdopodobnie należałoby go rozwiązać w inny sposób, nie poprzez interfejsy; przeczytaj this dla bardzo wykształcony zamiłowanie na ten temat.
Co więcej, jeśli naprawdę potrzebujesz czegoś podobnego do Arithmetic<T>
, możesz zawsze zbudować własne z dodatkowym poziomem pośrednictwa.
Nie trzeba było w tym polu wyświetlać. – Lee
@ Ile to prawda, prawda? Nie mam pojęcia, dlaczego ta odpowiedź została przyjęta, tak naprawdę rozważałem jej usunięcie, ponieważ nie byłem wcale przekonany, co napisałem. – InBetween
Najpierw zaakceptowałem to jako odpowiedź, ponieważ zawiera opisowy link. – LmTinyToon
- 1. C++ Format cout << Automatycznie
- 2. C++ std :: stringstream operator << przeciążenia
- 3. Wyrównanie C++ podczas drukowania cout <<
- 4. C++ wiele definicji operatora <<
- 5. jak operator przeciążenia << dla tablicy w C++?
- 6. C++: przyjaciel funkcji w klasie szablonu dla operatora <<
- 7. Jaki jest << operator robi w C++?
- 8. Coś jak wydruk END << END; w C++?
- 9. C# Func <> delegaci w bibliotece
- 10. Lista <int> w C#
- 11. Odpowiednik std :: aligned_storage <> w C?
- 12. Jak wpisać <C-x><C-o> w Vim?
- 13. C# - delegować System.Func < >
- 14. C# List <> XML
- 15. convert <vector><string> TO <vector><int> C++, Win32
- 16. Jak mogę wydrukować wartości w C bez określania ich typów, jak to zrobić za pomocą "cerr << (A) << endl" w C++?
- 17. C# Action <> z <> parametr Func
- 18. Operator Przeciążający C++; zbyt wiele parametrów dla << operacji
- 19. C++ map <string, wektor <char>> Dostęp
- 20. Redirector "<<<" w Ubuntu?
- 21. jak używać istnieć w List <string> w C#
- 22. Dlaczego GCC implementuje isnan() bardziej wydajnie dla C++ <cmath> niż C <math.h>?
- 23. klasa << notacja w modułach
- 24. C# szybciej niż SortedList sortowanie <>
- 25. C# IZliczanie <Object> na ciąg
- 26. Python <-> Komunikacja obiektowa C++
- 27. C# Func <> i generics
- 28. F # odpowiednik C# typeof (IEnumerable <>)
- 29. C# Dictionary <> i zmienne klawisze
- 30. C++: Funkcje łańcuchowe bez <cstring>
OP ma punkt - tutaj jest skomentowana ['IArmetmetyczna <>'] (https://referencesource.microsoft.com/#mscorlib/system/int16.cs,4f2f28ae4cd2bc79) – StuartLC
To już nie jest w coreclr [źródło ] (https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/Int32.cs#L26) – DaveShaw
Jeśli pytasz nas, czy jest zły, dobry czy przydatny, to opinia- na podstawie. Jeśli szukasz autorytatywnej odpowiedzi na pytanie, dlaczego to było kiedyś brane pod uwagę i ostatecznie nie zostało wdrożone, jest to [oparta na historii] (http://meta.stackoverflow.com/questions/276366/). W obu przypadkach nie jest to dobre pytanie dla SO. –