글꼴 속성의 setter에서 이전 글꼴을 삭제해야합니까?

dibs487

여러 글꼴이있는 보고서에 대한 설정 개체가 있습니다.

기본값은 다음과 같습니다.

public Font TitleFont { get; set; } = new Font("Arial", 8, FontStyle.Bold);

그러나 보고서의 gdi + 렌더링에 사용되기 전에 여러 위치에서 변경 될 수 있습니다. 이것은 winForms 컨트롤에 없습니다.

글꼴은 IDisposable을 구현하므로 속성의 setter에서 이전 글꼴을 삭제해야합니까? 아니면 글꼴 이름, 크기 및 스타일을 3 개의 속성으로 저장하고 필요할 때만 글꼴을 만들어야합니까?

드미트리 비 첸코

여기서 주요 질문은 클래스가 글꼴에 대한 책임 이 있는지 여부 입니다. 그렇다면 Dispose글꼴은 다음과 같아야 합니다.

 public class MyFontStorage: IDisposable {
   private Font m_MyFont; 
   ... 
   public Font MyFont {
     get {
       return m_MyFont; 
     } 
     set {
       if (m_MyFont == value)
         return;

       if (m_MyFont != null)
         m_MyFont.Dispose();

       m_MyFont = value;             
     }  
   }

   protected virtual void Dispose(bool disposing) {
     if (disposing) {
       MyFont = null;
     }
   }

   public void Dispose() {
     Dispose(this);

     GC.SuppressFinalize(this); 
   } 
 }

....

 using (MyFontStorage storage = new MyFontStorage()) {
   ...
   // Storage is responsible for the font
   storage.MyFont = new Font(...);
   ...
   // Control has responsibility for the font as well, that's why
   // we have to create a copy in order to each font instance has one owner
   MyControl.Font = new Font(MyFontStorage.MyFont, MyFontStorage.Font.Style);  
   ... 
 }  

만들기 사본을 단지 지정 대신하는 것은입니다 나쁜 관행 (오류 경향) 그리고 당신은 구현할 수 있습니다 이유의 공장 -

"글꼴 이름, 크기 및 스타일을 저장해야합니까?"

 public class MyFontFactory {
   private string m_FamilyName;
   private float m_Size;
   private FontStyle m_Style;

   ...

   public MyFontFactory(Font propotype) {
     ...
     m_FamilyName = propotype.FontFamily.Name;
     m_Size = propotype.Size;
     m_Style = propotype.Style;  
   } 

   public Font CreateFont() {
     return new Font(m_FamilyName, m_Size, m_Style);
   }
 } 

....

 MyFontFactory factory = new factory(SomeControl.Font);
 ...  
 // Much more natural:
 // MyFontFactory creates a new font and MyControl takes responsibility for it
 MyControl.Font = factory.CreateFont(); 

마지막으로 도우미 클래스 / 유틸리티 / 루틴 등의 경우

 public class MyFontMisc {
   private Font m_MyFont;

   public Font MyFont {
     get {
       return m_MyFont; 
     } 
     set {
       m_MyFont = value;             
     }  
   }

   // Just some computations
   public float EmSizeInMillimeters {
     get {
       if (null == m_MyFont)
         return 0.0;

       ...
     }  
   }
 } 

......

 // MyFontMisc doesn't hold any responsibility for the font  
 MyFontMisc misc = new MyFontMisc(SomeControl.Font); 

 // MyFontMisc just uses font for some computation and doesn't take 
 // any responsibility for the font (which owns to SomeControl) 
 Length = misc.EmSizeInMillimeters * 3.0f + 15.0f;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

동일한 글꼴에 대해 여러 글꼴 군 이름을 정의 할 수 있습니까?

분류에서Dev

Xamarin Forms에서 레이블의 글꼴을 Medium (시스템 글꼴)으로 설정하려면 어떻게해야합니까?

분류에서Dev

Firefox 57.0 글꼴이 Ubuntu 14.04의 Google Chrome 글꼴에 비해 이상합니다.

분류에서Dev

모바일 장치에서 사용자 정의 글꼴 및 글꼴 어썸 글꼴의 이상한 문제

분류에서Dev

글꼴 파일에서 글꼴 이름을 어떻게 얻습니까?

분류에서Dev

iOS에서 속성 문자열의 글꼴을 어떻게 변경합니까?

분류에서Dev

각 Google 글꼴 이름에 일반 글꼴 패밀리 이름을 사용해야합니다.

분류에서Dev

Linux의 글꼴 이름에서 글꼴 파일 찾기

분류에서Dev

이러한 CSS 글꼴 속성은 무엇을 의미합니까?

분류에서Dev

서버의 글꼴을 특정 방식으로 연결해야합니까?

분류에서Dev

이미 글꼴이 할당 된 여러 구성 요소의 글꼴을 한 번에 변경하는 방법은 무엇입니까?

분류에서Dev

캐럿을 움직일 때 PyCharm이 얇은 글꼴과 일반 글꼴간에 전환됩니다.

분류에서Dev

NSFontAttributeName에서 글꼴 이름을 어떻게 추출합니까?

분류에서Dev

이 날짜 스크립트에서 글꼴 및 글꼴 군을 어떻게 조정합니까?

분류에서Dev

파이 게임 글꼴에 글꼴 파일이 없습니다.

분류에서Dev

Firefox에서 국제 글꼴 지원을 활성화하려면 어떻게해야합니까?

분류에서Dev

Google 글꼴의 oswald 글꼴이 작동하지 않습니다.

분류에서Dev

UITableViewCell에서 레이블의 글꼴 속성 변경

분류에서Dev

"시스템"에서 다른 사전 설치된 글꼴로 글꼴을 변경 하시겠습니까?

분류에서Dev

가중치가 다른 여러 글꼴 파일에 대해 하나의 글꼴을 정의합니다.

분류에서Dev

글꼴에 공백이있는 경우 글꼴 속기를 어떻게 사용합니까?

분류에서Dev

NetBeans IDE의 글꼴 크기 / 글꼴 제품군을 늘리는 방법은 무엇입니까? (텍스트 편집기의 글꼴이 아님)

분류에서Dev

김프에 사전 설치된 글꼴을 제거하려면 어떻게해야합니까?

분류에서Dev

Thunderbird의 메시지 글꼴과 일치하도록 서명 글꼴을 얻으려면 어떻게합니까?

분류에서Dev

Android에서 세련된 글꼴을 일반 글꼴로 변환하는 방법이 있습니까?

분류에서Dev

글꼴이있는 경우 웹에서 다운로드 할 글꼴을 어떻게 얻습니까?

분류에서Dev

CSS 표준이 필수 글꼴을 정의합니까?

분류에서Dev

Joomla의 이전 버전에서 글꼴을 변경하는 방법! 관리자?

분류에서Dev

Jekyll은 config.yml에서 글꼴을 정의합니다.

Related 관련 기사

  1. 1

    동일한 글꼴에 대해 여러 글꼴 군 이름을 정의 할 수 있습니까?

  2. 2

    Xamarin Forms에서 레이블의 글꼴을 Medium (시스템 글꼴)으로 설정하려면 어떻게해야합니까?

  3. 3

    Firefox 57.0 글꼴이 Ubuntu 14.04의 Google Chrome 글꼴에 비해 이상합니다.

  4. 4

    모바일 장치에서 사용자 정의 글꼴 및 글꼴 어썸 글꼴의 이상한 문제

  5. 5

    글꼴 파일에서 글꼴 이름을 어떻게 얻습니까?

  6. 6

    iOS에서 속성 문자열의 글꼴을 어떻게 변경합니까?

  7. 7

    각 Google 글꼴 이름에 일반 글꼴 패밀리 이름을 사용해야합니다.

  8. 8

    Linux의 글꼴 이름에서 글꼴 파일 찾기

  9. 9

    이러한 CSS 글꼴 속성은 무엇을 의미합니까?

  10. 10

    서버의 글꼴을 특정 방식으로 연결해야합니까?

  11. 11

    이미 글꼴이 할당 된 여러 구성 요소의 글꼴을 한 번에 변경하는 방법은 무엇입니까?

  12. 12

    캐럿을 움직일 때 PyCharm이 얇은 글꼴과 일반 글꼴간에 전환됩니다.

  13. 13

    NSFontAttributeName에서 글꼴 이름을 어떻게 추출합니까?

  14. 14

    이 날짜 스크립트에서 글꼴 및 글꼴 군을 어떻게 조정합니까?

  15. 15

    파이 게임 글꼴에 글꼴 파일이 없습니다.

  16. 16

    Firefox에서 국제 글꼴 지원을 활성화하려면 어떻게해야합니까?

  17. 17

    Google 글꼴의 oswald 글꼴이 작동하지 않습니다.

  18. 18

    UITableViewCell에서 레이블의 글꼴 속성 변경

  19. 19

    "시스템"에서 다른 사전 설치된 글꼴로 글꼴을 변경 하시겠습니까?

  20. 20

    가중치가 다른 여러 글꼴 파일에 대해 하나의 글꼴을 정의합니다.

  21. 21

    글꼴에 공백이있는 경우 글꼴 속기를 어떻게 사용합니까?

  22. 22

    NetBeans IDE의 글꼴 크기 / 글꼴 제품군을 늘리는 방법은 무엇입니까? (텍스트 편집기의 글꼴이 아님)

  23. 23

    김프에 사전 설치된 글꼴을 제거하려면 어떻게해야합니까?

  24. 24

    Thunderbird의 메시지 글꼴과 일치하도록 서명 글꼴을 얻으려면 어떻게합니까?

  25. 25

    Android에서 세련된 글꼴을 일반 글꼴로 변환하는 방법이 있습니까?

  26. 26

    글꼴이있는 경우 웹에서 다운로드 할 글꼴을 어떻게 얻습니까?

  27. 27

    CSS 표준이 필수 글꼴을 정의합니까?

  28. 28

    Joomla의 이전 버전에서 글꼴을 변경하는 방법! 관리자?

  29. 29

    Jekyll은 config.yml에서 글꼴을 정의합니다.

뜨겁다태그

보관