2011-03-09 9 views
0

これは十分に簡単なはずです。ここで私に迷惑を与えているコードの私の1つのラインです:ポイント構造体の作成が拒否されます

Point tp3 = new Point(0.0, 0.0); 

そして、まだ私はその直後に分解し、イミディエイトウィンドウに「TP3」と入力した場合、私は「名前 『TP3』取得は存在しません現在のコンテキスト。一体何が起こっているの?このプロジェクトでは、1行だけではなく、もっと多くのコードがありますが、何が影響を与えているのかは分かりません。私は文字通りこの行の直後にある行を文字通り壊しており、tp3はどこにも見えません。ブレークモードでtp3上にカーソルを置くと、そこには何も得られません。

これを引き起こしている可能性があるのは誰ですか?なぜC#でポイントを作成できないのですか?

編集:私はSystem.Windows.Point構造体を使用していますが、私が実際にリリースモードで動作していることを発見しました。もちろん、tp3はガベージコレクションされていたので、問題はありました。迅速で正確な回答に感謝します。私は私の頭脳を引き抜こうとしていた。はい、私の頭脳。

編集#2:実際には、Maupertuisが指摘しているように(完全に意図したpun)、Pointは構造化されていないので、収集されたgarbではなく、代わりに最初の場所使用されていません。ありがとうMaupertuis!

+0

デバッグモードまたはリリースモードでコンパイルしていますか? – Jacob

+0

あなたは「ポイント」を言っていますか? 'System.Drawing.Point'構造体はコンパイルされません。あなたは、デバッグまたはリリースビルドを使用していますか? 'Point'クラスまたは構造体ですか? – CodesInChaos

+0

'tp3'を試してみてください。それが本当にあるかどうかを確認します。代わりにデバッガを使用しているので、デバッガが表示したいものが表示されます。 –

答えて

4

tp3が使用されなくなった場合、範囲外として分類され、ガベージコレクションの対象となります。

あなたのラインの後にPoint tempP = tp3;のようなものを追加してみると、それを見ることができるはずです。

+0

ポイントが構造体であるため、tp3はスタック内にあり、ヒープには存在しません。したがって、ガベージコレクションは適用されません。^_^ – Eilistraee

+0

それはそうです、私はそれを忘れました。 「Point * object * refuses ...」というタイトルの示唆の力は私にオブジェクトを考えさせました。 – DaveShaw

+0

タイトルを変更しました。私は "Point struct"と言うのは慎重でした。なぜなら、Point(という名前のインスタンス)ではなく、Pointという新しい構造体を定義しようと思っていると思っていたからです。 C#では、ボンネットの下に、構造体がオブジェクトとして実装されていますか?ちょっと興味があるんだけど。 – JoeCool

1

浮動小数点引数を整数コンストラクタに渡しています。

代わりPointFをインスタンス化してみてください。

PointF tp3 = new PointF(0.0f, 0.0f); 

さらに良いことに、PointF構造ですので、ちょうど使用:

PointF tp3 = PointF.Empty; 
+0

私はもっと多くの人がヌルオブジェクトを使いたいと思っています。その明確で表現力豊かな。 –

2

最適化コードのチェックボックスがプロジェクトのプロパティでチェックされている場合、それは本質的意志ガベージコレクションできるようにローカルオブジェクトを最後の使用後にnullに設定します。また、変数がどこにも使用されない場合、実際には割り当てられません。

デバッグモードまたはリリースモードに直接依存しませんが、デバッグモードのデフォルトは未チェック(最適化されていません)で、リリースデフォルトはオンに設定されています。

関連する問題