# 3) .Net ( Vs 2008 )/C#

IFormattable 와 ( IFormatProvider, ICustomFormatter )

이꼬모꼬 2013. 8. 20. 12:39

 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
    }