Znaczenie interfejsu IFormatProvider

Znaczenie interfejsu IFormatProvider
Adamos19
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 293
0

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

Kopiuj
 
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.

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
1

CultureInfo jest takim format providerem.

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

Ano dlatego, że:

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

w tym przypadku dostaniemy 123.10, natomiast w tym przypadku:

Kopiuj
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

Adamos19
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 293
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ę...

ŁF
  • Rejestracja: dni
  • Ostatnio: dni
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.

Adamos19
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 293
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.