이 페이지가 유용했습니까?
이 콘텐츠에 대한 여러분의 의견은 중요합니다. 의견을 알려주십시오.
추가 의견
1500자 남음
내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

IFormatProvider.GetFormat 메서드

2013-12-13

지정된 형식에 대한 형식 지정 서비스를 제공하는 개체를 반환합니다.

Namespace:  System
어셈블리:  mscorlib(mscorlib.dll)

Object GetFormat(
	Type formatType
)

매개 변수

formatType
형식: System.Type
반환할 형식 개체의 형식을 지정하는 개체입니다.

반환 값

형식: System.Object
IFormatProvider 구현에서 해당 형식의 개체를 제공할 수 있으면 formatType에서 지정한 개체의 인스턴스이고, 그렇지 않으면 null입니다.

GetFormat은 형식 지정 및 구문 분석 메서드에서 구문 분석 작업의 입력 문자열 형식 또는 형식 지정 작업의 출력 문자열 형식에 대한 정보를 가져오기 위해 호출하는 콜백 메서드입니다. 형식 지정 또는 구문 분석 메서드에서는 formatType 매개 변수에 해당 작업을 수행하는 데 필요한 개체의 형식을 전달합니다. IFormatProvider 구현에서 이 형식 지정 또는 구문 분석 개체를 제공할 수 있으면 해당 개체가 반환됩니다. 그렇지 않으면 null이 반환됩니다.

예를 들어 Int32.ToString(IFormatProvider) 메서드를 호출할 때 메서드 인수는 현재 정수 인스턴스에 대한 문자열 표현의 형식을 지정하는 방법에 대한 정보를 제공하는 IFormatProvider 개체입니다. 런타임에 메서드가 실행되면 IFormatProvider 개체의 GetFormat 메서드를 호출하고 NumberFormatInfo 형식을 나타내는 Type 개체를 전달합니다. IFormatProvider 개체에서 NumberFormatInfo 개체를 제공할 수 있으면 해당 개체가 반환됩니다. 해당 형식의 개체를 제공할 수 없으면 null이 반환됩니다.

사용자 지정 형식 지정 또는 구문 분석 서비스를 제공하는 클래스에서 IFormatProvider 인터페이스 및 GetFormat 메서드를 구현할 수 있습니다. 이렇게 하면 IFormatProvider 형식의 매개 변수가 있는 구문 분석 또는 형식 지정 메서드의 모든 오버로드(예: String.Format(IFormatProvider, String, Object[]), Int32.ToString(String, IFormatProvider) 또는 DateTime.Parse(String, IFormatProvider))에 IFormatProvider 구현을 인수로 전달할 수 있습니다.

다음 예제에서는 IFormatProvider 인터페이스 및 GetFormat 메서드를 구현하는 클래스의 사용 방법을 보여 줍니다. AcctNumberFormat 클래스는 계정 번호를 나타내는 Int64 값을 형식이 지정된 12자리 계정 번호로 변환합니다. 이 클래스의 GetFormat 메서드는 formatType 매개 변수가 ICustomFormatter를 구현하는 클래스를 참조하는 경우 자체에 대한 참조를 반환하고, 그렇지 않은 경우 GetFormatnull을 반환합니다.


public class AcctNumberFormat : IFormatProvider, ICustomFormatter
{
   private const int ACCT_LENGTH = 12;

   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(string fmt, object arg, IFormatProvider formatProvider) 
   {
      // Provide default formatting if arg is not an Int64.
      if (arg.GetType() != typeof(Int64))
         try {
            return HandleOtherFormats(fmt, arg); 
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }

      // Provide default formatting for unsupported format strings.
      fmt = fmt.ToUpper(CultureInfo.InvariantCulture);
      if (! (fmt == "H" || fmt == "I")) 
         return HandleOtherFormats(fmt, arg);

      // Convert argument to a string.
      string result = arg.ToString();

      // If account number is less than 12 characters, pad with leading zeroes.
      if (result.Length < ACCT_LENGTH)
         result = result.PadLeft(ACCT_LENGTH, '0');
      // If account number is more than 12 characters, truncate to 12 characters.
      if (result.Length > ACCT_LENGTH)
         result = result.Substring(0, ACCT_LENGTH);   

      if (fmt.ToUpper() == "I")                    // Integer-only format. 
         return result;
      // Add hyphens for H format specifier.
      else if (fmt.ToUpper() == "H")               // Hyphenated format.
         return result.Substring(0, 5) + "-" + result.Substring(5, 3) + "-" + result.Substring(8);
      // Return string representation of argument for any other formatting code.
      else
         try {
            return HandleOtherFormats(fmt, arg); 
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }
   }

   private string HandleOtherFormats(string format, object arg)
   {
      if (arg is IFormattable) 
         return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
      else if (arg != null)
         return arg.ToString();
      else
         return String.Empty;
   }
}


그런 다음 형식 지정 또는 구문 분석 서비스를 제공하는 메서드에 AcctNumberFormat 클래스의 인스턴스를 인수로 전달할 수 있습니다. 예를 들어 다음 코드에서는 String.Format(IFormatProvider, String, Object[]) 메서드에 AcctNumberFormat 클래스를 전달하여 형식이 지정된 12자리 계정 번호를 생성합니다.


public enum DaysOfWeek { Monday=1, Tuesday=2 };

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      long acctNumber;
      double balance; 
      DaysOfWeek wday; 
      string output;

      acctNumber = 104254567890;
      balance = 16.34;
      wday = DaysOfWeek.Monday;

      output = String.Format(new AcctNumberFormat(), 
                             "On {2}, the balance of account {0:H} was {1:C2}.", 
                             acctNumber, balance, wday);
      outputBlock.Text += output + "\n";

      wday = DaysOfWeek.Tuesday;
      output = String.Format(new AcctNumberFormat(), 
                             "On {2}, the balance of account {0:I} was {1:C2}.", 
                             acctNumber, balance, wday);
      outputBlock.Text += output + "\n";
   }
}
// The example displays the following output:
//    On Monday, the balance of account 10425-456-7890 was $16.34.
//    On Tuesday, the balance of account 104254567890 was $16.34.


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft