2011-06-23 25 views
0

私はC#をかなり新しくしています。 C++では、同じデータの一部またはすべてを含む2つのコレクションが必要な場合は、本当に簡単です。たとえば、ヒープ上にオブジェクトを作成し、各コレクション内に(自動)ポインタのコレクションを使用するだけです。 C#ではポインタの概念がないようですので、C#でどのように同じことをしますか?C#同じデータを含む2つのコレクションを使用する

1つのコレクション(おそらく配列)にはすべてのオブジェクトが含まれます。もう一方(おそらくキュー)には、配列に含まれるもののサブセットが含まれます。最終的にオブジェクトはキューから削除されますが、配列内に残ります。

これは確かに本当に簡単な質問ですが、私はまだC++とC#の違いに頭を下げています。

+0

C#にはポインタがありません – harryovers

+0

@harryoversは安全でないモードでのみ使用します。 –

+0

...しかし、一般的にそれらを使用する必要はありません。 –

答えて

2

C#のは、安全でないコンテキスト内のポインタを持っています。しかし、ほとんどの複雑なオブジェクトはC#で参照渡しされます。つまり、2つのコレクションに追加するオブジェクトが同じオブジェクトになる(単純化された)ことを意味します。文字列と整数は、とりわけ値型であり、文字列は不変です。

C#でのタイプの詳細:不変のhttp://msdn.microsoft.com/en-us/library/3ewxz6et.aspx

長々ブログ投稿:http://blogs.msdn.com/b/ericlippert/archive/2007/11/13/immutability-in-c-part-one-kinds-of-immutability.aspx


C#はあなたのためのメモリと参照管理の世話をするガベージコレクタを持っているし、そして任意の孤立した参照がします通常、妥当な時間内に清掃してください。メモリ管理上の

より:C#のデータでhttp://msdn.microsoft.com/en-us/library/f144e03t(v=VS.100).aspx

+0

ありがとうございました。私は今それを理解し、実際には今私は理解している私はそれがどんなばかげた疑問を認識します。だから皆の忍耐に感謝します。 – Jonnster

+0

管理されていないコードから管理されたコードに変わった人は、まったく馬鹿ではありません。 –

2

まず参照型と値型を理解する必要があります。あなたがC++に慣れているよう

http://www.codeproject.com/KB/cs/Types.aspx

+0

私はそれを理解しています。 C#では新しいものではありません。しかし、コレクションでの参照を使用するC++では、私の経験では避けてください。物事が乱雑になったり、参考資料を使用してコレクションがほとんど使用できなくなったりする状況がありました。 C#での参照がC++での参照と異なるのですか? C++でのオブジェクト参照のリストは恐ろしいでしょう。 C#は自動的に何らかのリファレンスカウントを行いますか? – Jonnster

+1

C#にはガベージコレクタが用意されています。ガベージコレクタはメモリと参照管理を担当し、孤立した参照は通常、妥当な時間内にクリーンアップされます。この楽しい話を含むように私の答えを更新しました。 =) –

0

はデフォルトreferencedである(それはstruct(ValueTypeに)でない限り、コピーされていない)、あなたはそれが別のオブジェクトと一つの場所に変数を割り当てるので、もし作成された参照。

例:

class C {} 
var a = new C(); 
var b = a; 
//a and b points to the same object 

とにかくあなたは(推奨しませんが)unsafeコンテキストでC#でポインタを使用することができます。

0

C#のほとんどすべてのオブジェクトは、ヒープ上に構築され、ポインタを介してアクセスされます。 .は、C++では->とほぼ同じように使用されます。 IMHOはもっと自然に動作します。

"ポインタ"について考えると、コレクションにはデータが含まれていないため、データを参照します。

あなたの例では、説明したとおりに動作します。

関連する問題