2

我正在制作一些实用程序类,它们可以将不同类型的符号放置在 CAD 图纸的立面上。我想确保如果我需要处理我这样做的 GraphicsPath 对象。

在 getCircle 函数内部的以下代码中,它显示我正在将 myPath“GraphicsPath”对象传递给 AddStringToPath 函数。

我不能为此使用 using(){} 范围,因为我将 myPath 图形对象作为引用传递。

这种设计可以使用还是我需要采用不同的方式来确保垃圾收集?

 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

您不需要像ref这里那样通过路径。ref仅当您想更改path调用函数中的指向时才有用。摆脱refusing像往常一样添加。

并阅读值类型和引用类型以及ref实际有用的内容。

于 2012-12-30T23:58:27.463 回答
4

创建路径的函数应稍后在 using 语句中使用

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

如果您调用该函数CreateCircle而不是getCircle

于 2012-12-31T00:11:11.497 回答