퇴근5분전

 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