2

CAD図面の立面図に配置するさまざまなタイプのシンボルを作成するユーティリティクラスをいくつか作成しています。GraphicsPathオブジェクトを破棄する必要がある場合は、それを確認したいと思います。

以下のコードでは、getCircle関数内から、myPath"GraphicsPath"オブジェクトをAddStringToPath関数に渡していることを示しています。

myPathグラフィックスオブジェクトを参照として渡しているため、using(){}スコープを使用できません。

このデザインは使用しても大丈夫ですか、それともガベージコレクションを確実にするためにこれを別の方法で実行する必要がありますか?

 GraphicsPath getCircle(Graphics dc, string text = "")
        {
            GraphicsPath myPath = new GraphicsPath();
            myPath.AddEllipse(symbolCircle);

            AddStringToPath(dc, ref myPath, text);

            return myPath;
        }
        void AddStringToPath(Graphics dc, ref GraphicsPath path, string text)
        {
            SizeF textSize = dc.MeasureString(text, elevFont);

            var centerX = (path.GetBounds().Width / 2) - (textSize.Width / 2);
            var centerY = (path.GetBounds().Height / 2) - (textSize.Height / 2);

            // Add the string to the path.
            path.AddString(text,
                elevFont.FontFamily,
                (int)elevFont.Style,
                elevFont.Size,
                new PointF(centerX + 2, centerY + 2),
                StringFormat.GenericDefault);
        }
4

2 に答える 2

4

パスを作成する関数は、後で using ステートメントで使用する必要があります

 using(var path = getCircle(dc, "Text"))
 {
      // do something with path
 }

CreateCircle代わりに関数を呼び出すと、それも良いでしょうgetCircle

于 2012-12-31T00:11:11.497 に答える
4

ここのようにパスを渡す必要はありませんref。呼び出し元の関数で何を指すrefかを変更したい場合にのみ役立ちます。pathを取り除き、通常どおりref追加します。using

そして、値型と参照型、およびref実際に役立つものについて読んでください。

于 2012-12-30T23:58:27.463 に答える