2017-01-24 5 views
5

私はC#のソースコード参照を探検しました。そして私はIArithmetic<T>インターフェイスの興味深い言及と出会いました。たとえば、Int32,Doubleには、IArithmeticインターフェイスのコメント付き実装が含まれています。私はこれらの細部に興味があります。私が理解しているように、それは算術演算の「サポート」を追加しようとしています。しかし、なぜ彼らはコメントされていますか?サポートする汎用の演算子を追加するのは悪い方法ですか?IArithmetic <T>インターフェイスはC#

+0

OPには点があります。コメントは['IArithmetic <>']です(https://referencesource.microsoft.com/#mscorlib/system/int16.cs,4f2f28ae4cd2bc79) – StuartLC

+0

これはもうcoreclr [source ](https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/Int32.cs#L26) – DaveShaw

+4

もしそれが悪いか良いか有用かを私たちに聞いているのであれば、ベース。なぜこれがかつて考慮されなかったのか、そして最終的には実装されていないのかについての権威ある答えを探しているのならば、それは[history-based](http://meta.stackoverflow.com/questions/276366/)です。どちらの場合でも、それは良いことではありません。 –

答えて

3

パフォーマンス上の理由から、使い勝手の面でおそらく廃止されました。

インターフェイスを介した算術演算をサポートするプリミティブ型は、あまり魅力的ではありません。必要なボクシングとアンボクシングのために単に値タイプ自体を使用するのと比べて、パフォーマンスは恐ろしいものになります。

どうすればよいですか?さて、最初に覚えておいていただきたいのは次のシナリオです:

public Matrix<T> where T: IArithmetic<T> 

などです。これは面白いかもしれませんが、パフォーマンス上の理由から、インターフェースを介さずに解決する必要があるかもしれません。被験者に非常に教育を受けた人のためにthisを読んでください。

さらに、Arithmetic<T>のようなものが本当に必要な場合は、追加レベルの間接指定を使用して独自のものを構築できます。

+1

あなたの例では、ボックスにする必要はありません。 – Lee

+1

@Lee Thats本当ですか?この答えがなぜ受け入れられたのか分かりません。私が書いたことで私が全く確信していなかったので、私はそれを消去することを検討していました。 – InBetween

+0

説明的なリンクが含まれているので、私は最初は答えとして受け入れました。 – LmTinyToon

関連する問題