Znaczenie interfejsu IFormatProvider

0

Chciałbym prosić o analizę poniższego bardzo krótkiego kodu:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            bool x = true;
            IConvertible p = (IConvertible)x;
            IFormatProvider ifp = null;
            Int32 b = p.ToInt32(ifp);

            Console.WriteLine(b); Console.ReadKey();
 
        }
    }
}

Program konwertuje wartość typu bool do struktury Int32.
Chciałbym dowiedzieć się dlaczego metody ToXXX interfejsu IConvertible przyjmują za parametr inny interfejs IFormatProvider.
Jakie w ogóle jest znaczenie interfejsu IFormatProvider. Próbowałem z szukajką google ale nic z tego mi nie wyszło. Proszę skromnie o wyjaśnienie.

1

CultureInfo jest takim format providerem.

Chciałbym dowiedzieć się dlaczego metody ToXXX interfejsu IConvertible przyjmują za parametr inny interfejs IFormatProvider.

Ano dlatego, że:

double d = 123.20;
var s = Convert.ToString(s, CultureInfo.GetCultureInfo("en-US"))

w tym przypadku dostaniemy 123.10, natomiast w tym przypadku:

double d = 123.20;
var s = Convert.ToString(s, CultureInfo.GetCultureInfo("pl-PL"))

dostaniemy 123,10.
Jest jeszcze wiele ustawień zależnych od kultury jak format daty czy waluty

0

No dobrze, rozumiem sens stosowania jako argumentu interfejsu.
Ale czy to oznacza że argumentem nie jest interfejs tylko obiekt który ten interfejs implementuje ?

I dlaczego używasz statycznej klasy Convert zamiast odpowiedzieć mi w kategorii rzutowania na interfejs.
Zdaję sobie sprawę z tego iż to wnosi podobną funkcjonalność ale chciałbym się upewnić czy dobrze rozumuję...

1

Nie możesz podać interfejsu jako argumentu, argumentem jest zawsze obiekt, a obiekt może być implementacją interfejsu (lub obiektem zawierającym informacje o interfejsie), czyli instancją klasy implementującej interfejs, ale nigdy interfejsem samym w sobie.

0

Dzięki Wszystkim za odpowiedzi.
Dobre z Was ludziska, sam chcę być tacy jak Wy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1