0

いつものように、Microsoft のインターフェイスを使用するのが最適なカスタム フォーマッタの実装を検討しているので、ICustomFormatter を見つけました。

http://msdn.microsoft.com/en-us/library/system.icustomformatter.format(v=vs.110).aspx

ただし、インターフェイスの署名はこれを提供します。

public string Format(string format, object arg, IFormatProvider formatProvider)
{

}

何のために formatProvider を使うのでしょうか? どの formatProvider がこの ICustomFormatter をロードしたかについて懸念する理由の良い例をまだ見ていません。

私が見つけた唯一の例は、次のようなものです。

http://www.codeproject.com/Articles/6533/Custom-String-Formatting-in-NET

if (formatProvider is NumberFormatInfo)
    if (((NumberFormatInfo)formatProvider).UseDiacritic)
        c = diacritic;

しかし、これはひどい設計のように見えます (インターフェースを取り、それを強く結合します)。

特別なユースケースがありませんか?

4

1 に答える 1

1

IFormatProvider は、カルチャ固有のグローバルな書式設定情報をカスタム フォーマッタに提供するために存在します。もちろん、カスタム フォーマッタの動作によっては、この情報が必要ない場合もありますが、たとえば、通貨、浮動小数点数、または日付をフォーマットする場合は、必要になる可能性があります。

于 2013-11-25T23:36:45.820 に答える