2012-12-30 1 views
2

CAD 도면의 입면에 다른 유형의 기호를 배치하는 유틸리티 클래스를 만들고 있습니다. 그렇게하는 GraphicsPath 객체를 처리해야하는지 확인하고 싶습니다.GraphicsPath를 사용 후 폐기해야합니까?

getCircle 함수 내부에서 아래 코드는 myPath "GraphicsPath"개체를 AddStringToPath 함수에 전달하고 있음을 보여줍니다.

myPath 그래픽 객체를 ref로 전달하기 때문에 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

함수는 사용자가 getCircle

+0

감사합니다. 더 나은 명명 규칙을 제공합니다. –

+0

더 좋은데,'var path ='또는'GraphicsPath path ='? – barlop

4

경로를 ref으로 전달하지 않아도됩니다. ref은 호출 기능에서 path이 가리키는 것을 변경하려는 경우에만 유용합니다. ref을 제거하고 평소대로 using을 추가하십시오.

가치 유형 및 참조 유형을 읽고 어떤 것이 유용할까요? ref이 실제로 유용합니다. 경로를 생성

+0

+1 대신 기능 CreateCircle를 호출한다면 그것은 또한, 더 나은 것 using 문

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

이후에 사용되어야한다. path에'using'은 getCircle을 호출하는 장소에 있어야하며, 질문을 읽는 것으로부터 느껴지는 * insisde * getCircle이 아니라는 것에주의하십시오. –

+0

알아두면 getCircle에서 경로를 만들고 해당 경로에서 AddStringToPath로 작업하고 있습니다. 나는 그것이 옳다고 믿는다. –

+0

@Storefront : 제안한대로 해보고'ref'가 실제로하는 일을 읽어보십시오. 'GraphicsPath'는 참조 형입니다. –