2016-03-26 11 views
0

私はオブジェクトパラメータとジェネリックパラメータの違いについて考えていましたか?オブジェクトパラメータとジェネリックパラメータ(型パラメータ)の違い

public foo<T>(T abc) 

public foo(object abc) 

両方実際には変数の一種であると私はその基底クラスのすべて

Whatareテdifeerencesので、私が好きなものの中に多くのObjectを変換することができますか?

+1

最初の宣言が間違っています。 'public F foo(T abc)'で、 'class FooClass 'のようなクラスでなければなりません。また、おそらくhttps://programmers.stackexchange.com/questions/215769/how-are-generics-implementedを見てください。 –

+0

そのトピックの説明は、短すぎるかもしれません。一般的には、書籍のいくつかの章に共通しています。 – Everts

+0

あなたの質問は何ですか?あなたはその違いについて考えていました。違いは?彼らは本質的に(頬の舌)同じものに沸騰するかどうか尋ねていますか? – Eminem

答えて

0

ジェネリックスは複雑なトピックであり、その違いを理解していない場合は、より深く掘り下げるようお勧めします。

略語:オブジェクトを使用すると、オブジェクトがタイプAであると予想されるときに実行時例外に晒されますが、実際にはタイプBです。ジェネリックは、多くのオブジェクトを作成するという義務を取り除いて型の安全性を提供しますe。 g。多くの異なるタイプに対して同じことをする関数です。遺伝的制約を使用することで、強力で安全なソリューションを作成できます。

さらにリーディング:

https://msdn.microsoft.com/library/d5x73970.aspx?f=255&MSPPError=-2147217396https://msdn.microsoft.com/en-us/library/512aeb7t.aspx

0

パフォーマンス - オブジェクトに値型を変換する場合、ボックス化とアンボックス化は非常に高価です。 型セーフ - オブジェクトをキャストする必要があるため、コンパイル時の型の安全性が失われます。

この問題を解決します。

0

あなたの方法を見ることなく違いを伝えるのは難しいです。あなたのメソッドがコンソールへの入力のタイプを書いているだけの場合、違いはありません。しかし、あなたのメソッドがオブジェクトをキャストして何かをしている場合、違いがあります。

ジェネリックは、制約のために非常に強力で、他のジェネリック型から継承することができます。

ので、一般的な違い:

タイプの安全性:あなたが何かを送ることができますが、オブジェクトと、実行時にエラーを取得することができ詠唱中。制約を使用すると、ジェネリックでコンパイル時にエラーが発生します。

クリーナーコード:あなたは常にオブジェクトを使用してキャスティングを使用します。あなたはジェネリックスでこれを行う必要はありません。

より良いパフォーマンス(値の種類の場合):ジェネリックでボクシングとアンボックスはありません。値の型を送信すると、最初にこのメモリヒープ(ボクシング)が配置され、次にメモリヒープ(アンボクシング)からオブジェクトへのスタックスタックになります。

+0

パフォーマンスは議論の余地があります。ジェネリックスを使用すると、使用するすべての型に対して、汎用化されたメソッド、クラスなどの新しい実装が完成します。プロファイリングなしでは、「パフォーマンス」は全く曖昧です。 – Eris

+0

はい、あなたは正しいですが、値の種類によってパフォーマンスが向上します。または私は間違っていますか? –

+0

質問があまりにも曖昧です。実際に呼び出される頻度、使用される方法などによって異なります。 – Eris

関連する問題