Formatul compozit

Ca o contribuție la formatul compozit, .NET Framework folosește o listă de obiecte și un șir de format compozit. Șirul formatului compozit constă din text fix, care include elemente de plasare indexate, numite elemente de formatare și care corespund obiectelor din listă. Operația de formatare creează un șir de rezultate constând din textul fixat original, care include o reprezentare de șir a obiectelor din listă.







Funcția de formatare a compușilor este susținută de următoarele metode:

Metoda String.Format. care returnează un șir de rezultate formatat.

Metoda StringBuilder.AppendFormat. care adaugă șirul de rezultate formatat obiectului StringBuilder.

Unele versiuni supraîncărcate ale metodei Console.WriteLine. care afișează șirul de rezultate formatat în consola.

Unele versiuni supraîncărcate ale metodei TextWriter.WriteLine. care scrie șirul formatat rezultat într-un flux sau fișier. Clase derivate din TextWriter. cum ar fi StreamWriter și HtmlTextWriter. susțineți și această funcție.

Metoda Debug.WriteLine (String, Object []). care afișează mesajul formatat către ascultătorii de urmărire.

Metoda TraceSource.TraceInformation (String, Object []). care scrie metoda de informare pentru ascultătorii urmăriți.

Orice element de formatare poate trimite un obiect de listă arbitrară. De exemplu, dacă există trei obiecte, puteți să formatați mai întâi cel de-al doilea și apoi primul și al treilea obiect, specificând următorul șir de formate compuse: "". Obiecte care nu sunt menționate de elemente de formatare sunt sărite. Dacă mânerul de parametri se referă la un element din afara listei de obiecte, un FormatExcepție este aruncat la momentul executării.

aliniere

Componenta opțională de aliniere este un număr întreg semnat care indică lățimea dorită a câmpului de formatare. Dacă valoarea de aliniere este mai mică decât lungimea șirului de format, alinierea este omisă, iar lungimea șirului formatat este folosită ca valoare lățime a câmpului. Datele formate sunt aliniate în câmpul din dreapta, dacă alinierea are o valoare pozitivă sau este justificată la stânga dacă alinierea are o valoare negativă. Dacă este necesar, șirul formatat este căptușit cu spații. Când utilizați componenta de aliniere, trebuie să introduceți o virgulă.

În exemplul de mai jos sunt definite două matrice: una conține numele angajaților, iar al doilea - numărul de ore lucrate timp de două săptămâni. Șirul formatului compozit aliniază numele din stânga câmpului de 20 de caractere, iar orele de funcționare se află în partea dreaptă a câmpului de 5 caractere. Rețineți că șirul standard de format "N1" este, de asemenea, utilizat pentru a formata ceasul cu o singură cifră a părții fracționare.

Formați componenta șir

Componenta opțională formatString este un șir de formate care corespunde tipului de obiect formatat. Dacă obiectul corespunzător este un obiect DateTime. atunci se utilizează un șir de format standard sau personalizat, iar dacă obiectul corespunzător este o valoare de enumerare, se folosește șirul de formate de enumerare. Dacă componenta formatString nu este specificată, formatul comun ("G") este utilizat pentru valori numerice, valori de dată și oră și enumerări. Când utilizați componenta formatString, aveți nevoie de un colon.







Tipuri de enumerare (toate tipurile derivate din System.Enum)

Decorarea bretelelor

Începutul și sfârșitul elementului de formatare este indicat de către bretele de deschidere și de închidere, respectiv. Aceasta înseamnă că trebuie să utilizați secvențe de evacuare pentru a imprima bretelele de deschidere și de închidere. Pentru a scoate o bretele de deschidere sau de închidere într-un text fix, trebuie să introduceți două bretele de deschidere sau de închidere corespunzătoare (">"). Parantezele curbate din elementul de formatare sunt interpretate secvențial în ordinea în care sunt detectate. Interpretarea parantezelor imbricate nu este acceptată.

Ordinea în care sunt interpretate parantezele poate duce la rezultate neprevăzute. De exemplu, luați în considerare elementul de formatare ">>", care ar trebui să emită o brevet de deschidere, o valoare numerică formatată în formă zecimală și o brevet de închidere. De fapt, elementul de formatare va fi interpretat după cum urmează:

Primele două bretele de deschidere curl ("

Următoarele trei semne ("

Următorul caracter ("D") trebuie interpretat ca un pointer la un format de număr zecimal, dar perechea de bretele (">>") din spatele acestuia oferă o singură brevet. Deoarece șirul rezultat ("D>") nu este un descriptor standard al unui format numeric, va fi interpretat ca un șir de format definit de utilizator, ceea ce va duce la ieșirea șirului "D>".

Ultima breșă curly (">") este interpretată ca sfârșitul elementului de formatare.

Rezultatul final, care va fi afișat - șirul "". Valoarea numerică care a fost necesară pentru a fi formatată nu va fi afișată.

O modalitate de a evita interpretarea greșită a armăturilor și a elementelor de formatare la scrierea codului este de a forma separat cotierele curbate și elementele de formatare. Acest lucru înseamnă că prima operație este de a ieșire șirul de format cu bretele de deschidere, următoarea operație - rezultatul formatare element de procesare, iar acesta din urmă operațiune - linie cu bretele de capăt. Această abordare este prezentată în exemplul de mai jos.

Ordine de procesare

Dacă apelul metodei de formatare compozit conține argumentul IFormatProvider. a căror valoare nu este nulă. Timpul de executare a apelului solicită metoda IFormatProvider.GetFormat. pentru a solicita o implementare ICustomFormatter. Dacă metoda poate întoarce o implementare ICustomFormatter. este stocat în cache pentru o utilizare ulterioară.

Fiecare valoare din lista de parametri care corespunde elementului de formatare este convertită într-un șir prin efectuarea următoarelor acțiuni. Dacă orice condiție din primii trei pași are o valoare logică a "true", reprezentarea șirului de valoare este returnată la această etapă și pașii ulteriori nu sunt executați.

Dacă valoarea formatată este nulă. un șir gol ("") este returnat.

Dacă este disponibilă implementarea ICustomFormatter, runtime-ul îi apelează metoda Format. Acesta trece la metoda valoarea elementului de formatare formatString (dacă există) sau null (dacă lipsește), împreună cu implementarea IFormatProvider.

Dacă valoarea implementează interfața IFormattable. Se numește metoda ToString (String, IFormatProvider) acestei interfețe. Metoda trece valoarea formatString (dacă există în elementul de formatare) sau null (dacă nu este prezentă). Argumentul IFormatProvider este definit după cum urmează:

Pentru o valoare numerică, dacă metoda de formatare compusă este apelată cu argumentul IFormatProvider. nu egal cu null, timpul de executare solicită obiectul NumberFormatInfo din metoda IFormatProvider.GetFormat. Dacă obiectul nu poate fi furnizat dacă argumentul este nul sau dacă metoda de formatare compus nu are un parametru IFormatProvider. atunci obiectul NumberFormatInfo este utilizat pentru limbajul și parametrii regionali ai fluxului curent.

Pentru o valoare dată și oră, dacă metoda de formatare compusă este apelată cu argumentul IFormatProvider. nu este egal cu null, runtime cere obiectul DateTimeFormatInfo din metoda IFormatProvider.GetFormat. Dacă obiectul nu poate fi furnizat dacă argumentul este nul sau dacă metoda de formatare compus nu are un parametru IFormatProvider. atunci obiectul DateTimeFormatInfo este utilizat pentru limbajul și parametrii regionali ai fluxului curent.

Pentru obiecte de alte tipuri, dacă metoda de formatare compus este apelată cu argumentul IFormatProvider. atunci valoarea sa (inclusiv null, dacă obiectul IFormatProvider nu este specificat) este trecut direct la implementarea IFormattable.ToString. În caz contrar, obiectul CultureInfo. care reprezintă limbajul și parametrii regionali ai fluxului curent, este trecut la implementarea IFormattable.ToString.

Apelă metoda ToString fără parametri, care suprascrie Object.ToString () sau moștenește comportamentul clasei de bază. În acest caz, șirul de format specificat în componenta formatString din elementul de formatare (dacă există) este ignorat.

După pașii anteriori, se realizează alinierea.







Articole similare

Trimiteți-le prietenilor: