IFormattable 와 ( IFormatProvider, ICustomFormatter )
IFormattable 은 객체자체적으로 특정 포멧을 제공할때 사용하고
IFormatProvider 는 객체에 특정 포멧들을 외부에서 제공할때 사용한다.
소스 변환기를 만들면서 각 디자인 아이템들의 내부에서 제공할것들과 외부에서 만들어지는 것들을
별도로 분리하여 설계할때 도움이 컸다.
마냥 사용하던 두가지를 분리해서 사용하니 편하였음.
Data data = new Data();
string Result1 = string.Format("{0:FMT}", data);
DataFormatter fmt2 = new DataFormatter();
string Result2 = string.Format(fmt2, "{0:FMT2}", data);
요렇게 사용하면
Result1 에는 "사용자정의 = Data" 이 반환되고
Result2 에는 "FMT2 [사용자정의 = Data]" 가 반환 된다.
public class Data : IFormattable
{
#region IFormattable 멤버
public string ToString(string format, IFormatProvider formatProvider)
{
if (format == "FMT")
{
return "사용자정의 = Data";
}
return ToString();
}
#endregion
}
public class DataFormatter : IFormatProvider , ICustomFormatter
{
#region IFormatProvider 멤버
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter)) return this;
return null;
}
#endregion
#region ICustomFormatter 멤버
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (format == "FMT2")
{
return "FMT2 ["+ string.Format("{0:FMT}", arg) + "]";
}
return "";
}
#endregion
}
'# 3) .Net ( Vs 2008 ) > C#' 카테고리의 다른 글
Winform] Effect 효과 처리! (0) | 2013.08.23 |
---|---|
WinForm + WebApi ] HighLight( 하이라이트 ) (0) | 2013.08.22 |
FlexGrid ] Cols[ 컬럼명 ].DataMap (0) | 2011.12.07 |
GlassForm (1) | 2011.11.15 |
Array.ConvertAll 관련... (0) | 2011.11.15 |