2017-01-24 28 views
5

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#

+0

OP ma punkt - tutaj jest skomentowana ['IArmetmetyczna <>'] (https://referencesource.microsoft.com/#mscorlib/system/int16.cs,4f2f28ae4cd2bc79) – StuartLC

+0

To już nie jest w coreclr [źródło ] (https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/Int32.cs#L26) – DaveShaw

+4

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. –

Odpowiedz

3

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.

+1

Nie trzeba było w tym polu wyświetlać. – Lee

+1

@ 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

+0

Najpierw zaakceptowałem to jako odpowiedź, ponieważ zawiera opisowy link. – LmTinyToon