Genel Bakış: .NET'te sayıları, tarihleri, sabit listeleri ve diğer türleri biçimlendirme

Biçimlendirme, bir sınıfın veya yapının örneğini ya da numaralandırma değerini dize gösterimine dönüştürme işlemidir. Amaç, sonuçta elde edilen dizeyi kullanıcılara görüntülemek veya özgün veri türünü geri yüklemek için daha sonra seri durumdan çıkarmaktır. Bu makalede.NET'in sağladığı biçimlendirme mekanizmaları tanıt sağlanmaktadır.

Not

Ayrıştırma, biçimlendirmenin tersidir. Ayrıştırma işlemi, dize gösteriminden bir veri türünün örneğini oluşturur. Daha fazla bilgi için bkz . Dizeleri Ayrıştırma. Serileştirme ve seri durumdan çıkarma hakkında bilgi için bkz . .NET'te serileştirme.

Biçimlendirme için temel mekanizma, bu konunun devamında yer alan ToString Yöntemini Kullanarak Varsayılan Biçimlendirme bölümünde açıklanan yöntemin varsayılan uygulamasıdırObject.ToString. Ancak.NET, varsayılan biçimlendirme desteğini değiştirmek ve genişletmek için çeşitli yollar sağlar. Bunlar aşağıdakileri içerir:

  • Bir nesnenin değerinin Object.ToString özel dize gösterimini tanımlamak için yöntemini geçersiz kılma. Daha fazla bilgi için bu konunun devamında yer alan ToString Yöntemini Geçersiz Kılma bölümüne bakın.

  • Nesne değerinin dize gösteriminin birden çok form almasını sağlayan biçim tanımlayıcıları tanımlama. Örneğin, aşağıdaki deyimdeki "X" biçim tanımlayıcısı bir tamsayıyı onaltılık değerin dize gösterimine dönüştürür.

    int integerValue = 60312;
    Console.WriteLine(integerValue.ToString("X"));   // Displays EB98.
    
    Dim integerValue As Integer = 60312
    Console.WriteLine(integerValue.ToString("X"))   ' Displays EB98.
    

    Biçim tanımlayıcıları hakkında daha fazla bilgi için ToString Yöntemi ve Biçim Dizeleri bölümüne bakın.

  • Belirli bir kültürün biçimlendirme kurallarını uygulamak için biçim sağlayıcılarını kullanma. Örneğin, aşağıdaki deyim en-US kültürünün biçimlendirme kurallarını kullanarak bir para birimi değeri görüntüler.

    double cost = 1632.54;
    Console.WriteLine(cost.ToString("C",
                      new System.Globalization.CultureInfo("en-US")));
    // The example displays the following output:
    //       $1,632.54
    
    Dim cost As Double = 1632.54
    Console.WriteLine(cost.ToString("C", New System.Globalization.CultureInfo("en-US")))
    ' The example displays the following output:
    '       $1,632.54
    

    Biçim sağlayıcılarıyla biçimlendirme hakkında daha fazla bilgi için Biçim Sağlayıcıları bölümüne bakın.

  • Hem dize dönüştürmeyi IFormattable hem de bileşik biçimlendirmeyi desteklemek için arabirimini Convert uygulama. Daha fazla bilgi için IFormattable Arabirimi bölümüne bakın.

  • Bir değerin dize gösterimini daha büyük bir dizeye eklemek için bileşik biçimlendirme kullanma. Daha fazla bilgi için Bileşik Biçimlendirme bölümüne bakın.

  • Dize ilişkilendirmesini kullanarak, bir değerin dize gösterimini daha büyük bir dizeye eklemek için daha okunabilir bir söz dizimi. Daha fazla bilgi için bkz . Dize ilişkilendirme.

  • ve uygulayarak ICustomFormatterIFormatProvider eksiksiz bir özel biçimlendirme çözümü sağlar. Daha fazla bilgi için ICustomFormatter ile Özel Biçimlendirme bölümüne bakın.

Aşağıdaki bölümlerde, bir nesneyi dize gösterimine dönüştürmek için bu yöntemler incelendi.

ToString yöntemini kullanarak varsayılan biçimlendirme

öğesinden System.Object türetilen her tür, varsayılan olarak türün adını döndüren parametresiz ToString bir yöntemi otomatik olarak devralır. Aşağıdaki örnekte varsayılan ToString yöntem gösterilmektedir. Uygulaması olmayan adlı Automobile bir sınıf tanımlar. Sınıf örneği oluşturulurken ve ToString yöntemi çağrıldığında, türü adını görüntüler. Yöntemin ToString örnekte açıkça çağrılmadığını unutmayın. yöntemi, Console.WriteLine(Object) bağımsız değişken olarak geçirilen nesnenin yöntemini örtük olarak çağırır ToString .

using System;

public class Automobile
{
   // No implementation. All members are inherited from Object.
}

public class Example9
{
   public static void Main()
   {
      Automobile firstAuto = new Automobile();
      Console.WriteLine(firstAuto);
   }
}
// The example displays the following output:
//       Automobile
Public Class Automobile
    ' No implementation. All members are inherited from Object.
End Class

Module Example9
    Public Sub Main9()
        Dim firstAuto As New Automobile()
        Console.WriteLine(firstAuto)
    End Sub
End Module
' The example displays the following output:
'       Automobile

Uyarı

Windows 8.1'den başlayarak Windows Çalışma Zamanı, varsayılan biçimlendirme desteği sağlayan IStringable.ToString adlı tek bir yönteme sahip bir IStringable arabirim içerir. Ancak yönetilen türlerin arabirimi uygulamaması IStringable önerilir. Daha fazla bilgi için başvuru sayfasındaki "Windows Çalışma Zamanı ve IStringable Arabirim" bölümüne Object.ToString bakın.

Arabirimler dışındaki tüm türler türünden Objecttüretildiğinden, bu işlevsellik özel sınıflarınıza veya yapılarınıza otomatik olarak sağlanır. Ancak, varsayılan ToString yöntem tarafından sunulan işlevsellik sınırlıdır: Türü tanımlasa da, türün bir örneği hakkında herhangi bir bilgi sağlayamaz. Bir nesne hakkında bilgi sağlayan bir nesnenin dize gösterimini sağlamak için yöntemini geçersiz kılmanız ToString gerekir.

Not

Yapılar öğesinden ValueTypedevralır ve bu da öğesinden Objecttüretilir. geçersiz kılsa Object.ToStringdaValueType, uygulaması aynıdır.

ToString yöntemini geçersiz kılma

Bir türün adını görüntülemek genellikle sınırlı kullanım içindir ve türünüzün tüketicilerinin bir örneği diğerinden ayırt etmelerine izin vermez. Ancak, bir nesnenin ToString değerinin daha kullanışlı bir gösterimini sağlamak için yöntemini geçersiz kılabilirsiniz. Aşağıdaki örnek bir Temperature nesneyi tanımlar ve sıcaklığı santigrat derece olarak görüntülemek için yöntemini geçersiz kılar ToString .

public class Temperature
{
    private decimal temp;

    public Temperature(decimal temperature)
    {
        this.temp = temperature;
    }

    public override string ToString()
    {
        return this.temp.ToString("N1") + "°C";
    }
}

public class Example12
{
    public static void Main()
    {
        Temperature currentTemperature = new Temperature(23.6m);
        Console.WriteLine($"The current temperature is {currentTemperature}");
    }
}
// The example displays the following output:
//       The current temperature is 23.6°C.
Public Class Temperature
    Private temp As Decimal

    Public Sub New(temperature As Decimal)
        Me.temp = temperature
    End Sub

    Public Overrides Function ToString() As String
        Return Me.temp.ToString("N1") + "°C"
    End Function
End Class

Module Example13
    Public Sub Main13()
        Dim currentTemperature As New Temperature(23.6D)
        Console.WriteLine("The current temperature is " +
                          currentTemperature.ToString())
    End Sub
End Module
' The example displays the following output:
'       The current temperature is 23.6°C.

.NET'te, ToString nesnenin adını değil değerini görüntülemek için her ilkel değer türünün yöntemi geçersiz kılındı. Aşağıdaki tabloda her temel tür için geçersiz kılma gösterilmektedir. Geçersiz kılınan yöntemlerin çoğunun yönteminin başka bir aşırı yüklemesini ToString çağırdığını ve türü için genel biçimi tanımlayan "G" biçim tanımlayıcısını ve geçerli kültürü temsil eden bir IFormatProvider nesneyi geçirdiğini unutmayın.

Tür ToString geçersiz kılma
Boolean Boolean.TrueString veya Boolean.FalseStringdöndürür.
Byte Geçerli kültürün Byte değerini biçimlendirmek için çağırırByte.ToString("G", NumberFormatInfo.CurrentInfo).
Char Karakteri dize olarak döndürür.
DateTime Geçerli kültürün tarih ve saat değerini biçimlendirmek için çağrılar DateTime.ToString("G", DatetimeFormatInfo.CurrentInfo) .
Decimal Geçerli kültürün Decimal değerini biçimlendirmek için çağırırDecimal.ToString("G", NumberFormatInfo.CurrentInfo).
Double Geçerli kültürün Double değerini biçimlendirmek için çağırırDouble.ToString("G", NumberFormatInfo.CurrentInfo).
Int16 Geçerli kültürün Int16 değerini biçimlendirmek için çağırırInt16.ToString("G", NumberFormatInfo.CurrentInfo).
Int32 Geçerli kültürün Int32 değerini biçimlendirmek için çağırırInt32.ToString("G", NumberFormatInfo.CurrentInfo).
Int64 Geçerli kültürün Int64 değerini biçimlendirmek için çağırırInt64.ToString("G", NumberFormatInfo.CurrentInfo).
SByte Geçerli kültürün SByte değerini biçimlendirmek için çağırırSByte.ToString("G", NumberFormatInfo.CurrentInfo).
Single Geçerli kültürün Single değerini biçimlendirmek için çağırırSingle.ToString("G", NumberFormatInfo.CurrentInfo).
UInt16 Geçerli kültürün UInt16 değerini biçimlendirmek için çağırırUInt16.ToString("G", NumberFormatInfo.CurrentInfo).
UInt32 Geçerli kültürün UInt32 değerini biçimlendirmek için çağırırUInt32.ToString("G", NumberFormatInfo.CurrentInfo).
UInt64 Geçerli kültürün UInt64 değerini biçimlendirmek için çağırırUInt64.ToString("G", NumberFormatInfo.CurrentInfo).

ToString yöntemi ve biçim dizeleri

Nesnenin tek bir dize gösterimi olduğunda varsayılan ToString yönteme veya geçersiz kılmaya ToString güvenmek uygundur. Ancak, bir nesnenin değeri genellikle birden çok gösterime sahiptir. Örneğin, bir sıcaklık Fahrenheit, santigrat derece veya kelvin cinsinden ifade edilebilir. Benzer şekilde, 10 tamsayı değeri 10, 10,0, 1,0e01 veya 10,00 TL gibi çeşitli yollarla temsil edilebilir.

.NET, tek bir değerin birden çok dize gösterimine sahip olmasını sağlamak için biçim dizelerini kullanır. Biçim dizesi, yöntemin çıkışını nasıl ToString biçimlendirmesi gerektiğini tanımlayan tek karakterler veya karakter grupları olan, önceden tanımlanmış bir veya daha fazla biçim tanımlayıcısı içeren bir dizedir. Biçim dizesi daha sonra nesnenin ToString yöntemine parametre olarak geçirilir ve nesnenin değerinin dize gösteriminin nasıl görüneceğini belirler.

.NET'teki tüm sayısal türler, tarih ve saat türleri ve numaralandırma türleri önceden tanımlanmış biçim tanımlayıcıları kümesini destekler. Uygulama tanımlı veri türlerinizin birden çok dize gösterimini tanımlamak için biçim dizelerini de kullanabilirsiniz.

Standart biçim dizeleri

Standart biçim dizesi, uygulandığı nesnenin dize gösterimini tanımlayan alfabetik bir karakter olan tek bir biçim tanımlayıcısı ve sonuç dizesinde görüntülenen basamak sayısını etkileyen isteğe bağlı bir duyarlık tanımlayıcısı içerir. Duyarlık belirtici atlanırsa veya desteklenmiyorsa, standart biçim tanımlayıcısı standart biçim dizesine eşdeğerdir.

.NET, tüm sayısal türler, tüm tarih ve saat türleri ve tüm numaralandırma türleri için bir dizi standart biçim tanımlayıcısı tanımlar. Örneğin, bu kategorilerin her biri, bu tür bir değerin genel dize gösterimini tanımlayan "G" standart biçim tanımlayıcısını destekler.

Numaralandırma türleri için standart biçim dizeleri, bir değerin dize gösterimini doğrudan denetler. Bir numaralandırma değerinin ToString yöntemine geçirilen biçim dizeleri, değerin dize adı ("G" ve "F" biçim tanımlayıcıları), temel integral değeri ("D" biçim belirticisi) veya onaltılık değeri ("X" biçim tanımlayıcısı) kullanılarak görüntülenip görüntülenmeyeceğini belirler. Aşağıdaki örnekte, bir DayOfWeek numaralandırma değerini biçimlendirmek için standart biçim dizelerinin kullanımı gösterilmektedir.

DayOfWeek thisDay = DayOfWeek.Monday;
string[] formatStrings = {"G", "F", "D", "X"};

foreach (string formatString in formatStrings)
   Console.WriteLine(thisDay.ToString(formatString));
// The example displays the following output:
//       Monday
//       Monday
//       1
//       00000001
Dim thisDay As DayOfWeek = DayOfWeek.Monday
Dim formatStrings() As String = {"G", "F", "D", "X"}

For Each formatString As String In formatStrings
    Console.WriteLine(thisDay.ToString(formatString))
Next
' The example displays the following output:
'       Monday
'       Monday
'       1
'       00000001

Numaralandırma biçimi dizeleri hakkında bilgi için bkz . Numaralandırma Biçimi Dizeleri.

Sayısal türler için standart biçim dizeleri genellikle kesin görünümü bir veya daha fazla özellik değeri tarafından denetlenen bir sonuç dizesi tanımlar. Örneğin, "C" biçim belirticisi bir sayıyı para birimi değeri olarak biçimlendirir. Yöntemini tek parametre olarak "C" biçim tanımlayıcısı ile çağırdığınızda ToString , sayısal değerin dize gösterimini tanımlamak için geçerli kültürün NumberFormatInfo nesnesinden aşağıdaki özellik değerleri kullanılır:

  • CurrencySymbol Geçerli kültürün para birimi simgesini belirten özelliği.

  • Aşağıdakileri CurrencyNegativePattern belirleyen bir tamsayı döndüren or CurrencyPositivePattern özelliği:

    • Para birimi simgesinin yerleşimi.

    • Negatif değerlerin baştaki negatif işaretle mi, sondaki negatif işaretle mi yoksa parantezle mi gösterilip belirtilmediği.

    • Sayısal değer ile para birimi simgesi arasında boşluk görünüp görünmediği.

  • CurrencyDecimalDigits Sonuç dizesindeki kesirli basamak sayısını tanımlayan özelliği.

  • Sonuç CurrencyDecimalSeparator dizesindeki ondalık ayırıcı simgesini tanımlayan özelliği.

  • Grup CurrencyGroupSeparator ayırıcı simgesini tanımlayan özelliği.

  • Ondalık CurrencyGroupSizes değerin solundaki her gruptaki basamak sayısını tanımlayan özelliği.

  • Negatif NegativeSign değerleri belirtmek için parantezler kullanılmazsa sonuç dizesinde kullanılan negatif işareti belirleyen özelliği.

Buna ek olarak, sayısal biçim dizeleri bir duyarlık tanımlayıcısı içerebilir. Bu tanımlayıcının anlamı, kullanıldığı biçim dizesine bağlıdır, ancak genellikle toplam basamak sayısını veya sonuç dizesinde görünmesi gereken kesirli basamak sayısını gösterir. Örneğin, aşağıdaki örnek dört onaltılık basamak içeren bir dize değeri oluşturmak için "X4" standart sayısal dizesini ve bir duyarlık tanımlayıcısını kullanır.

byte[] byteValues = { 12, 163, 255 };
foreach (byte byteValue in byteValues)
   Console.WriteLine(byteValue.ToString("X4"));
// The example displays the following output:
//       000C
//       00A3
//       00FF
Dim byteValues() As Byte = {12, 163, 255}
For Each byteValue As Byte In byteValues
    Console.WriteLine(byteValue.ToString("X4"))
Next
' The example displays the following output:
'       000C
'       00A3
'       00FF

Standart sayısal biçimlendirme dizeleri hakkında daha fazla bilgi için bkz . Standart Sayısal Biçim Dizeleri.

Tarih ve saat değerleri için standart biçim dizeleri, belirli DateTimeFormatInfo bir özellik tarafından depolanan özel biçim dizelerinin diğer adlarıdır. Örneğin, "D" biçim tanımlayıcısı ile bir tarih ve saat değerinin yöntemini çağırmak ToString , geçerli kültürün DateTimeFormatInfo.LongDatePattern özelliğinde depolanan özel biçim dizesini kullanarak tarih ve saati görüntüler. (Özel biçim dizeleri hakkında daha fazla bilgi için sonraki bölüme bakın.) Aşağıdaki örnekte bu ilişki gösterilmektedir.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2009, 6, 30);
      Console.WriteLine("D Format Specifier:     {0:D}", date1);
      string longPattern = CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern;
      Console.WriteLine("'{0}' custom format string:     {1}",
                        longPattern, date1.ToString(longPattern));
   }
}
// The example displays the following output when run on a system whose
// current culture is en-US:
//    D Format Specifier:     Tuesday, June 30, 2009
//    'dddd, MMMM dd, yyyy' custom format string:     Tuesday, June 30, 2009
Imports System.Globalization

Module Example
    Public Sub Main0()
        Dim date1 As Date = #6/30/2009#
        Console.WriteLine("D Format Specifier:     {0:D}", date1)
        Dim longPattern As String = CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern
        Console.WriteLine("'{0}' custom format string:     {1}",
                          longPattern, date1.ToString(longPattern))
    End Sub
End Module
' The example displays the following output when run on a system whose
' current culture is en-US:
'    D Format Specifier:     Tuesday, June 30, 2009
'    'dddd, MMMM dd, yyyy' custom format string:     Tuesday, June 30, 2009

Standart tarih ve saat biçim dizeleri hakkında daha fazla bilgi için bkz . Standart Tarih ve Saat Biçim Dizeleri.

Standart biçim dizelerini, nesnenin yöntemi tarafından oluşturulan uygulama tanımlı bir nesnenin dize gösterimini ToString(String) tanımlamak için de kullanabilirsiniz. Nesnenizin desteklediği belirli standart biçim tanımlayıcılarını tanımlayabilir ve bunların büyük/küçük harfe duyarlı mı yoksa büyük/küçük harfe duyarlı mı olduğunu belirleyebilirsiniz. yöntemini uygulamanız ToString(String) aşağıdakileri desteklemelidir:

  • Nesnenin özel veya ortak biçimini temsil eden bir "G" biçim tanımlayıcısı. Nesnenizin ToString yönteminin parametresiz aşırı yüklemesi, aşırı yüklemesini ToString(String) çağırmalı ve "G" standart biçim dizesini geçirmelidir.

  • Null başvuruya eşit bir biçim tanımlayıcısı desteği (Nothing Visual Basic'te). Null başvuruya eşit bir biçim tanımlayıcısı, "G" biçim tanımlayıcısına eşdeğer olarak kabul edilmelidir.

Örneğin, bir Temperature sınıf dahili olarak sıcaklığı santigrat derece olarak depolayabilir ve nesnenin Temperature değerini santigrat derece, Fahrenheit ve kelvins cinsinden temsil etmek için biçim tanımlayıcıları kullanabilir. Aşağıdaki örnek, bir gösterim sağlar.

using System;

public class Temperature
{
   private decimal m_Temp;

   public Temperature(decimal temperature)
   {
      this.m_Temp = temperature;
   }

   public decimal Celsius
   {
      get { return this.m_Temp; }
   }

   public decimal Kelvin
   {
      get { return this.m_Temp + 273.15m; }
   }

   public decimal Fahrenheit
   {
      get { return Math.Round(((decimal) (this.m_Temp * 9 / 5 + 32)), 2); }
   }

   public override string ToString()
   {
      return this.ToString("C");
   }

   public string ToString(string format)
   {
      // Handle null or empty string.
      if (String.IsNullOrEmpty(format)) format = "C";
      // Remove spaces and convert to uppercase.
      format = format.Trim().ToUpperInvariant();

      // Convert temperature to Fahrenheit and return string.
      switch (format)
      {
         // Convert temperature to Fahrenheit and return string.
         case "F":
            return this.Fahrenheit.ToString("N2") + " °F";
         // Convert temperature to Kelvin and return string.
         case "K":
            return this.Kelvin.ToString("N2") + " K";
         // return temperature in Celsius.
         case "G":
         case "C":
            return this.Celsius.ToString("N2") + " °C";
         default:
            throw new FormatException(String.Format("The '{0}' format string is not supported.", format));
      }
   }
}

public class Example1
{
   public static void Main()
   {
      Temperature temp1 = new Temperature(0m);
      Console.WriteLine(temp1.ToString());
      Console.WriteLine(temp1.ToString("G"));
      Console.WriteLine(temp1.ToString("C"));
      Console.WriteLine(temp1.ToString("F"));
      Console.WriteLine(temp1.ToString("K"));

      Temperature temp2 = new Temperature(-40m);
      Console.WriteLine(temp2.ToString());
      Console.WriteLine(temp2.ToString("G"));
      Console.WriteLine(temp2.ToString("C"));
      Console.WriteLine(temp2.ToString("F"));
      Console.WriteLine(temp2.ToString("K"));

      Temperature temp3 = new Temperature(16m);
      Console.WriteLine(temp3.ToString());
      Console.WriteLine(temp3.ToString("G"));
      Console.WriteLine(temp3.ToString("C"));
      Console.WriteLine(temp3.ToString("F"));
      Console.WriteLine(temp3.ToString("K"));

      Console.WriteLine(String.Format("The temperature is now {0:F}.", temp3));
   }
}
// The example displays the following output:
//       0.00 °C
//       0.00 °C
//       0.00 °C
//       32.00 °F
//       273.15 K
//       -40.00 °C
//       -40.00 °C
//       -40.00 °C
//       -40.00 °F
//       233.15 K
//       16.00 °C
//       16.00 °C
//       16.00 °C
//       60.80 °F
//       289.15 K
//       The temperature is now 16.00 °C.
Public Class Temperature
    Private m_Temp As Decimal

    Public Sub New(temperature As Decimal)
        Me.m_Temp = temperature
    End Sub

    Public ReadOnly Property Celsius() As Decimal
        Get
            Return Me.m_Temp
        End Get
    End Property

    Public ReadOnly Property Kelvin() As Decimal
        Get
            Return Me.m_Temp + 273.15D
        End Get
    End Property

    Public ReadOnly Property Fahrenheit() As Decimal
        Get
            Return Math.Round(CDec(Me.m_Temp * 9 / 5 + 32), 2)
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return Me.ToString("C")
    End Function

    Public Overloads Function ToString(format As String) As String
        ' Handle null or empty string.
        If String.IsNullOrEmpty(format) Then format = "C"
        ' Remove spaces and convert to uppercase.
        format = format.Trim().ToUpperInvariant()

        Select Case format
            Case "F"
                ' Convert temperature to Fahrenheit and return string.
                Return Me.Fahrenheit.ToString("N2") & " °F"
            Case "K"
                ' Convert temperature to Kelvin and return string.
                Return Me.Kelvin.ToString("N2") & " K"
            Case "C", "G"
                ' Return temperature in Celsius.
                Return Me.Celsius.ToString("N2") & " °C"
            Case Else
                Throw New FormatException(String.Format("The '{0}' format string is not supported.", format))
        End Select
    End Function
End Class

Public Module Example1
    Public Sub Main1()
        Dim temp1 As New Temperature(0D)
        Console.WriteLine(temp1.ToString())
        Console.WriteLine(temp1.ToString("G"))
        Console.WriteLine(temp1.ToString("C"))
        Console.WriteLine(temp1.ToString("F"))
        Console.WriteLine(temp1.ToString("K"))

        Dim temp2 As New Temperature(-40D)
        Console.WriteLine(temp2.ToString())
        Console.WriteLine(temp2.ToString("G"))
        Console.WriteLine(temp2.ToString("C"))
        Console.WriteLine(temp2.ToString("F"))
        Console.WriteLine(temp2.ToString("K"))

        Dim temp3 As New Temperature(16D)
        Console.WriteLine(temp3.ToString())
        Console.WriteLine(temp3.ToString("G"))
        Console.WriteLine(temp3.ToString("C"))
        Console.WriteLine(temp3.ToString("F"))
        Console.WriteLine(temp3.ToString("K"))

        Console.WriteLine(String.Format("The temperature is now {0:F}.", temp3))
    End Sub
End Module
' The example displays the following output:
'       0.00 °C
'       0.00 °C
'       0.00 °C
'       32.00 °F
'       273.15 K
'       -40.00 °C
'       -40.00 °C
'       -40.00 °C
'       -40.00 °F
'       233.15 K
'       16.00 °C
'       16.00 °C
'       16.00 °C
'       60.80 °F
'       289.15 K
'       The temperature is now 16.00 °C.

Özel biçim dizeleri

.NET, standart biçim dizelerine ek olarak hem sayısal değerler hem de tarih ve saat değerleri için özel biçim dizeleri tanımlar. Özel biçim dizesi, bir değerin dize gösterimini tanımlayan bir veya daha fazla özel biçim belirticiden oluşur. Örneğin, "yyyy/mm/dd hh:mm:ss.ffff t zzz" özel tarih ve saat biçim dizesi, bir tarihi en-US kültürü için "2008/11/15 07:45:00.0000 P -08:00" biçiminde dize gösterimine dönüştürür. Benzer şekilde, "0000" özel biçim dizesi 12 tamsayı değerini "0012" olarak dönüştürür. Özel biçim dizelerinin tam listesi için bkz . Özel Tarih ve Saat Biçim Dizeleri ve Özel Sayısal Biçim Dizeleri.

Biçim dizesi tek bir özel biçim tanımlayıcısından oluşuyorsa, standart biçim tanımlayıcısıyla karışıklığı önlemek için biçim belirticisinin önünde yüzde (%) simgesi bulunmalıdır. Aşağıdaki örnek, belirli bir tarihin ayının bir veya iki basamaklı numarasını görüntülemek için "M" özel biçim tanımlayıcısını kullanır.

DateTime date1 = new DateTime(2009, 9, 8);
Console.WriteLine(date1.ToString("%M"));       // Displays 9
Dim date1 As Date = #09/08/2009#
Console.WriteLine(date1.ToString("%M"))      ' Displays 9

Tarih ve saat değerleri için birçok standart biçim dizesi, nesnenin DateTimeFormatInfo özellikleri tarafından tanımlanan özel biçim dizelerinin diğer adlarıdır. Özel biçim dizeleri, sayısal değerler veya tarih ve saat değerleri için uygulama tanımlı biçimlendirme sağlama konusunda da önemli esneklik sunar. Birden çok özel biçim tanımlayıcısını tek bir özel biçim dizesinde birleştirerek hem sayısal değerler hem de tarih ve saat değerleri için kendi özel sonuç dizelerinizi tanımlayabilirsiniz. Aşağıdaki örnek, ayın adını, gününü ve yılını izleyen haftanın gününü parantez içinde görüntüleyen özel bir biçim dizesi tanımlar.

string customFormat = "MMMM dd, yyyy (dddd)";
DateTime date1 = new DateTime(2009, 8, 28);
Console.WriteLine(date1.ToString(customFormat));
// The example displays the following output if run on a system
// whose language is English:
//       August 28, 2009 (Friday)
Dim customFormat As String = "MMMM dd, yyyy (dddd)"
Dim date1 As Date = #8/28/2009#
Console.WriteLine(date1.ToString(customFormat))
' The example displays the following output if run on a system
' whose language is English:
'       August 28, 2009 (Friday)      

Aşağıdaki örnek, bir Int64 değeri alan koduyla birlikte standart, yedi basamaklı ABD telefon numarası olarak görüntüleyen özel bir biçim dizesi tanımlar.

using System;

public class Example17
{
   public static void Main()
   {
      long number = 8009999999;
      string fmt = "000-000-0000";
      Console.WriteLine(number.ToString(fmt));
   }
}
// The example displays the following output:
//        800-999-9999
Module Example18
    Public Sub Main18()
        Dim number As Long = 8009999999
        Dim fmt As String = "000-000-0000"
        Console.WriteLine(number.ToString(fmt))
    End Sub
End Module
' The example displays the following output:

' The example displays the following output:
'       800-999-9999

Standart biçim dizeleri genellikle uygulama tanımlı türleriniz için biçimlendirme gereksinimlerinin çoğunu işleyebilir, ancak türlerinizi biçimlendirmek için özel biçim tanımlayıcıları da tanımlayabilirsiniz.

Dizeleri ve .NET türlerini biçimlendirme

Tüm sayısal türler (yani , Byte, , Double, Int16, Int32, , UInt16UInt32SByteSingleInt64UInt64ve BigInteger türleri), DateTimeayrıca , DateTimeOffset, TimeSpan, Guidve tüm numaralandırma türleri, biçim dizeleriyle biçimlendirmeyi destekler. Decimal Her tür tarafından desteklenen belirli biçim dizeleri hakkında bilgi için aşağıdaki konulara bakın:

Başlık Tanım
Standart Sayısal Biçim Dizeleri Sayısal değerlerin yaygın olarak kullanılan dize gösterimlerini oluşturan standart biçim dizelerini açıklar.
Özel Sayısal Biçim Dizeleri Sayısal değerler için uygulamaya özgü biçimler oluşturan özel biçim dizelerini açıklar.
Standart Tarih ve Saat Biçim Dizeleri ve DateTimeOffset değerlerinin yaygın olarak kullanılan dize gösterimlerini oluşturan standart biçim dizelerini DateTime açıklar.
Özel Tarih ve Saat Biçim Dizeleri ve DateTimeOffset değerleri için DateTime uygulamaya özgü biçimler oluşturan özel biçim dizelerini açıklar.
Standart TimeSpan Biçim Dizeleri Zaman aralıklarının yaygın olarak kullanılan dize gösterimlerini oluşturan standart biçim dizelerini açıklar.
Özel TimeSpan Biçim Dizeleri Zaman aralıkları için uygulamaya özgü biçimler oluşturan özel biçim dizelerini açıklar.
Sabit Listesi Biçim Dizeleri Numaralandırma değerlerinin dize gösterimlerini oluşturmak için kullanılan standart biçim dizelerini açıklar.
Guid.ToString(String) Değerler için Guid standart biçim dizelerini açıklar.

Biçim sağlayıcılarıyla kültüre duyarlı biçimlendirme

Biçim tanımlayıcıları nesnelerin biçimlendirmesini özelleştirmenize izin verse de, nesnelerin anlamlı bir dize gösterimini oluşturmak için genellikle ek biçimlendirme bilgileri gerekir. Örneğin, "C" standart biçim dizesini veya "$ #,#.00" gibi özel bir biçim dizesini kullanarak bir sayıyı para birimi değeri olarak biçimlendirmek için, en azından doğru para birimi simgesi, grup ayırıcısı ve ondalık ayırıcı hakkında bilgilerin biçimlendirilmiş dizeye dahil edilebilecek şekilde olması gerekir. .NET'te, bu ek biçimlendirme bilgileri, sayısal türler ve tarih ve saat türleri yönteminin bir veya daha fazla aşırı yüklemesine ToString parametre olarak sağlanan arabirim aracılığıyla IFormatProvider kullanılabilir hale getirilir. IFormatProvider uygulamaları kültüre özgü biçimlendirmeyi desteklemek için .NET'te kullanılır. Aşağıdaki örnekte, farklı kültürleri temsil eden üç IFormatProvider nesneyle biçimlendirildiğinde nesnenin dize gösteriminin nasıl değiştiği gösterilmektedir.

using System;
using System.Globalization;

public class Example18
{
   public static void Main()
   {
      decimal value = 1603.42m;
      Console.WriteLine(value.ToString("C3", new CultureInfo("en-US")));
      Console.WriteLine(value.ToString("C3", new CultureInfo("fr-FR")));
      Console.WriteLine(value.ToString("C3", new CultureInfo("de-DE")));
   }
}
// The example displays the following output:
//       $1,603.420
//       1 603,420 €
//       1.603,420 €
Imports System.Globalization

Public Module Example11
    Public Sub Main11()
        Dim value As Decimal = 1603.42D
        Console.WriteLine(value.ToString("C3", New CultureInfo("en-US")))
        Console.WriteLine(value.ToString("C3", New CultureInfo("fr-FR")))
        Console.WriteLine(value.ToString("C3", New CultureInfo("de-DE")))
    End Sub
End Module
' The example displays the following output:
'       $1,603.420
'       1 603,420 €
'       1.603,420 €

Arabirim IFormatProvider , GetFormat(Type)biçimlendirme bilgileri sağlayan nesne türünü belirten tek bir parametreye sahip olan tek bir yöntemi içerir. Yöntemi bu tür bir nesne sağlayabilirse, döndürür. Aksi takdirde, null başvuru döndürür (Nothing Visual Basic'te).

IFormatProvider.GetFormat bir geri çağırma yöntemidir. Parametre içeren IFormatProvider bir ToString yöntem aşırı yüklemesini çağırdığınızda, bu IFormatProvider nesnenin GetFormat yöntemini çağırır. GetFormat yöntemi, parametresi tarafından formatType belirtilen gerekli biçimlendirme bilgilerini sağlayan bir nesneyi yöntemine döndürmekten ToString sorumludur.

Bir dizi biçimlendirme veya dize dönüştürme yöntemi türünde IFormatProviderbir parametre içerir, ancak çoğu durumda yöntem çağrıldığında parametrenin değeri yoksayılır. Aşağıdaki tabloda parametresini kullanan biçimlendirme yöntemlerinden bazıları ve yöntemine geçirdikleri nesnenin Type türü listelemektedir IFormatProvider.GetFormat .

Metot Parametre türü formatType
ToString sayısal türlerin yöntemi System.Globalization.NumberFormatInfo
ToString tarih ve saat türleri yöntemi System.Globalization.DateTimeFormatInfo
String.Format System.ICustomFormatter
StringBuilder.AppendFormat System.ICustomFormatter

Not

Sayısal ToString türlerin ve tarih ve saat türlerinin yöntemleri aşırı yüklenir ve yalnızca bazı aşırı yüklemeler bir IFormatProvider parametre içerir. Bir yöntemin türünde IFormatProviderbir parametresi yoksa, bunun yerine özelliği tarafından CultureInfo.CurrentCulture döndürülen nesne geçirilir. Örneğin, varsayılan Int32.ToString() yönteme yapılan bir çağrı, sonuç olarak aşağıdaki gibi bir yöntem çağrısına neden olur: Int32.ToString("G", System.Globalization.CultureInfo.CurrentCulture).

.NET, uygulayan IFormatProviderüç sınıf sağlar:

Bu sınıflardan herhangi birini değiştirmek için kendi biçim sağlayıcınızı da uygulayabilirsiniz. Ancak, yöntemine biçimlendirme bilgileri ToString sağlaması gerekiyorsa, uygulamanızın GetFormat yöntemi önceki tabloda listelenen türde bir nesne döndürmelidir.

Sayısal değerlerin kültüre duyarlı biçimlendirmesi

Varsayılan olarak, sayısal değerlerin biçimlendirmesi kültüre duyarlıdır. Biçimlendirme yöntemini çağırdığınızda bir kültür belirtmezseniz, geçerli kültürün biçimlendirme kuralları kullanılır. Bu, geçerli kültürü dört kez değiştiren ve ardından yöntemini çağıran aşağıdaki örnekte gösterilmiştir Decimal.ToString(String) . Her durumda, sonuç dizesi geçerli kültürün biçimlendirme kurallarını yansıtır. Bunun nedeni ve ToString(String) yöntemlerinin ToString çağrıları her sayısal türün yöntemine sarmalamalarıdırToString(String, IFormatProvider).

using System.Globalization;

public class Example6
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "es-MX", "de-DE" };
      Decimal value = 1043.17m;

      foreach (var cultureName in cultureNames) {
         // Change the current culture.
         CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);
         Console.WriteLine($"The current culture is {CultureInfo.CurrentCulture.Name}");
         Console.WriteLine(value.ToString("C2"));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       The current culture is en-US
//       $1,043.17
//
//       The current culture is fr-FR
//       1 043,17 €
//
//       The current culture is es-MX
//       $1,043.17
//
//       The current culture is de-DE
//       1.043,17 €
Imports System.Globalization

Module Example6
    Public Sub Main6()
        Dim cultureNames() As String = {"en-US", "fr-FR", "es-MX", "de-DE"}
        Dim value As Decimal = 1043.17D

        For Each cultureName In cultureNames
            ' Change the current culture.
            CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName)
            Console.WriteLine($"The current culture is {CultureInfo.CurrentCulture.Name}")
            Console.WriteLine(value.ToString("C2"))
            Console.WriteLine()
        Next
    End Sub
End Module
' The example displays the following output:
'       The current culture is en-US
'       $1,043.17
'       
'       The current culture is fr-FR
'       1 043,17 €
'       
'       The current culture is es-MX
'       $1,043.17
'       
'       The current culture is de-DE
'       1.043,17 €

Ayrıca, parametresi olan bir aşırı yüklemeyi çağırıp ToString aşağıdakilerden birini geçirerek belirli bir kültür için sayısal değer provider biçimlendirebilirsiniz:

Aşağıdaki örnek, kayan noktalı bir sayıyı biçimlendirmek için İngilizce (Birleşik Devletler) ve İngilizce (Birleşik Krallık) kültürlerini ve Fransızca ve Rusça nötr kültürlerini temsil eden nesneleri kullanırNumberFormatInfo.

using System.Globalization;

public class Example7
{
    public static void Main()
    {
        double value = 1043.62957;
        string[] cultureNames = { "en-US", "en-GB", "ru", "fr" };

        foreach (string? name in cultureNames)
        {
            NumberFormatInfo nfi = CultureInfo.CreateSpecificCulture(name).NumberFormat;
            Console.WriteLine("{0,-6} {1}", name + ":", value.ToString("N3", nfi));
        }
    }
}
// The example displays the following output:
//       en-US: 1,043.630
//       en-GB: 1,043.630
//       ru:    1 043,630
//       fr:    1 043,630
Imports System.Globalization

Module Example7
    Public Sub Main7()
        Dim value As Double = 1043.62957
        Dim cultureNames() As String = {"en-US", "en-GB", "ru", "fr"}

        For Each name In cultureNames
            Dim nfi As NumberFormatInfo = CultureInfo.CreateSpecificCulture(name).NumberFormat
            Console.WriteLine("{0,-6} {1}", name + ":", value.ToString("N3", nfi))
        Next
    End Sub
End Module
' The example displays the following output:
'       en-US: 1,043.630
'       en-GB: 1,043.630
'       ru:    1 043,630
'       fr:    1 043,630

Tarih ve saat değerlerinin kültüre duyarlı biçimlendirmesi

Varsayılan olarak, tarih ve saat değerlerinin biçimlendirmesi kültüre duyarlıdır. Biçimlendirme yöntemini çağırdığınızda bir kültür belirtmezseniz, geçerli kültürün biçimlendirme kuralları kullanılır. Bu, geçerli kültürü dört kez değiştiren ve ardından yöntemini çağıran aşağıdaki örnekte gösterilmiştir DateTime.ToString(String) . Her durumda, sonuç dizesi geçerli kültürün biçimlendirme kurallarını yansıtır. Bunun nedeni, , , ve yöntemlerinin DateTime.ToString()çağrıları ve DateTimeOffset.ToString(String, IFormatProvider) yöntemlerine sarmalamalarıdırDateTime.ToString(String, IFormatProvider).DateTimeOffset.ToString(String)DateTimeOffset.ToString()DateTime.ToString(String)

using System.Globalization;

public class Example4
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "es-MX", "de-DE" };
      DateTime dateToFormat = new DateTime(2012, 5, 28, 11, 30, 0);

      foreach (var cultureName in cultureNames) {
         // Change the current culture.
         CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);
         Console.WriteLine($"The current culture is {CultureInfo.CurrentCulture.Name}");
         Console.WriteLine(dateToFormat.ToString("F"));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       The current culture is en-US
//       Monday, May 28, 2012 11:30:00 AM
//
//       The current culture is fr-FR
//       lundi 28 mai 2012 11:30:00
//
//       The current culture is es-MX
//       lunes, 28 de mayo de 2012 11:30:00 a.m.
//
//       The current culture is de-DE
//       Montag, 28. Mai 2012 11:30:00
Imports System.Globalization
Imports System.Threading

Module Example4
    Public Sub Main4()
        Dim cultureNames() As String = {"en-US", "fr-FR", "es-MX", "de-DE"}
        Dim dateToFormat As Date = #5/28/2012 11:30AM#

        For Each cultureName In cultureNames
            ' Change the current culture.
            CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName)
            Console.WriteLine($"The current culture is {CultureInfo.CurrentCulture.Name}")
            Console.WriteLine(dateToFormat.ToString("F"))
            Console.WriteLine()
        Next
    End Sub
End Module
' The example displays the following output:
'       The current culture is en-US
'       Monday, May 28, 2012 11:30:00 AM
'       
'       The current culture is fr-FR
'       lundi 28 mai 2012 11:30:00
'       
'       The current culture is es-MX
'       lunes, 28 de mayo de 2012 11:30:00 a.m.
'       
'       The current culture is de-DE
'       Montag, 28. Mai 2012 11:30:00 

Ayrıca, parametresi olan veya aşırı yüklemesini çağırıp DateTime.ToStringDateTimeOffset.ToString aşağıdakilerden birini geçirerek belirli bir kültür için tarih provider ve saat değerini biçimlendirebilirsiniz:

Aşağıdaki örnek, bir tarihi biçimlendirmek için İngilizce (Birleşik Devletler) ve İngilizce (Birleşik Krallık) kültürlerini ve Fransızca ve Rusça nötr kültürlerini temsil eden nesneleri kullanırDateTimeFormatInfo.

using System.Globalization;

public class Example5
{
   public static void Main()
   {
      DateTime dat1 = new(2012, 5, 28, 11, 30, 0);
      string[] cultureNames = { "en-US", "en-GB", "ru", "fr" };

      foreach (var name in cultureNames) {
         DateTimeFormatInfo dtfi = CultureInfo.CreateSpecificCulture(name).DateTimeFormat;
         Console.WriteLine($"{name}: {dat1.ToString(dtfi)}");
      }
   }
}
// The example displays the following output:
//       en-US: 5/28/2012 11:30:00 AM
//       en-GB: 28/05/2012 11:30:00
//       ru: 28.05.2012 11:30:00
//       fr: 28/05/2012 11:30:00
Imports System.Globalization

Module Example5
    Public Sub Main5()
        Dim dat1 As Date = #5/28/2012 11:30AM#
        Dim cultureNames() As String = {"en-US", "en-GB", "ru", "fr"}

        For Each name In cultureNames
            Dim dtfi As DateTimeFormatInfo = CultureInfo.CreateSpecificCulture(name).DateTimeFormat
            Console.WriteLine($"{name}: {dat1.ToString(dtfi)}")
        Next
    End Sub
End Module
' The example displays the following output:
'       en-US: 5/28/2012 11:30:00 AM
'       en-GB: 28/05/2012 11:30:00
'       ru: 28.05.2012 11:30:00
'       fr: 28/05/2012 11:30:00

IFormattable arabirimi

Genellikle, yöntemini bir biçim dizesi ve parametre IFormatProvider ile aşırı yükleyen ToString türler de arabirimini IFormattable uygular. Bu arabirimin, IFormattable.ToString(String, IFormatProvider)parametre olarak hem biçim dizesini hem de biçim sağlayıcısını içeren tek bir üyesi vardır.

Uygulama tanımlı sınıfınız için arabirimi uygulamak IFormattable iki avantaj sunar:

Aşağıdaki örnek, arabirimini uygulayan IFormattable bir Temperature sınıfı tanımlar. Sıcaklığı santigrat cinsinden görüntülemek için "C" veya "G" biçim tanımlayıcılarını, Fahrenheit'te sıcaklığı görüntülemek için "F" biçim tanımlayıcısını ve Kelvin'de sıcaklığı görüntülemek için "K" biçim tanımlayıcısını destekler.

using System;
using System.Globalization;

namespace HotAndCold
{

    public class Temperature : IFormattable
    {
        private decimal m_Temp;

        public Temperature(decimal temperature)
        {
            this.m_Temp = temperature;
        }

        public decimal Celsius
        {
            get { return this.m_Temp; }
        }

        public decimal Kelvin
        {
            get { return this.m_Temp + 273.15m; }
        }

        public decimal Fahrenheit
        {
            get { return Math.Round((decimal)this.m_Temp * 9 / 5 + 32, 2); }
        }

        public override string ToString()
        {
            return this.ToString("G", null);
        }

        public string ToString(string format)
        {
            return this.ToString(format, null);
        }

        public string ToString(string format, IFormatProvider provider)
        {
            // Handle null or empty arguments.
            if (String.IsNullOrEmpty(format))
                format = "G";
            // Remove any white space and covert to uppercase.
            format = format.Trim().ToUpperInvariant();

            if (provider == null)
                provider = NumberFormatInfo.CurrentInfo;

            switch (format)
            {
                // Convert temperature to Fahrenheit and return string.
                case "F":
                    return this.Fahrenheit.ToString("N2", provider) + "°F";
                // Convert temperature to Kelvin and return string.
                case "K":
                    return this.Kelvin.ToString("N2", provider) + "K";
                // Return temperature in Celsius.
                case "C":
                case "G":
                    return this.Celsius.ToString("N2", provider) + "°C";
                default:
                    throw new FormatException(String.Format("The '{0}' format string is not supported.", format));
            }
        }
    }
Public Class Temperature : Implements IFormattable
    Private m_Temp As Decimal

    Public Sub New(temperature As Decimal)
        Me.m_Temp = temperature
    End Sub

    Public ReadOnly Property Celsius() As Decimal
        Get
            Return Me.m_Temp
        End Get
    End Property

    Public ReadOnly Property Kelvin() As Decimal
        Get
            Return Me.m_Temp + 273.15D
        End Get
    End Property

    Public ReadOnly Property Fahrenheit() As Decimal
        Get
            Return Math.Round(CDec(Me.m_Temp * 9 / 5 + 32), 2)
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return Me.ToString("G", Nothing)
    End Function

    Public Overloads Function ToString(format As String) As String
        Return Me.ToString(format, Nothing)
    End Function

    Public Overloads Function ToString(format As String, provider As IFormatProvider) As String _
       Implements IFormattable.ToString

        ' Handle null or empty arguments.
        If String.IsNullOrEmpty(format) Then format = "G"
        ' Remove any white space and convert to uppercase.
        format = format.Trim().ToUpperInvariant()

        If provider Is Nothing Then provider = NumberFormatInfo.CurrentInfo

        Select Case format
     ' Convert temperature to Fahrenheit and return string.
            Case "F"
                Return Me.Fahrenheit.ToString("N2", provider) & "°F"
     ' Convert temperature to Kelvin and return string.
            Case "K"
                Return Me.Kelvin.ToString("N2", provider) & "K"
     ' Return temperature in Celsius.
            Case "C", "G"
                Return Me.Celsius.ToString("N2", provider) & "°C"
            Case Else
                Throw New FormatException(String.Format($"The '{format}' format string is not supported."))
        End Select
    End Function
End Class

Aşağıdaki örnek bir nesnenin örneğini Temperature oluşturur. Ardından yöntemini çağırır ve bir Temperature nesnenin ToString farklı dize gösterimlerini elde etmek için çeşitli bileşik biçim dizeleri kullanır. Bu yöntem çağrılarının her biri sırayla sınıfının uygulamasını Temperature çağırırIFormattable.

public class Example11
{
    public static void Main()
    {
        CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
        Temperature temp = new Temperature(22m);
        Console.WriteLine(Convert.ToString(temp, new CultureInfo("ja-JP")));
        Console.WriteLine("Temperature: {0:K}", temp);
        Console.WriteLine("Temperature: {0:F}", temp);
        Console.WriteLine(String.Format(new CultureInfo("fr-FR"), "Temperature: {0:F}", temp));
    }
}
// The example displays the following output:
//       22.00°C
//       Temperature: 295.15K
//       Temperature: 71.60°F
//       Temperature: 71,60°F
Public Module Example12
    Public Sub Main12()
        Dim temp As New Temperature(22D)
        CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US")
        Console.WriteLine(Convert.ToString(temp, New CultureInfo("ja-JP")))
        Console.WriteLine($"Temperature: {temp:K}")
        Console.WriteLine($"Temperature: {temp:F}")
        Console.WriteLine(String.Format(New CultureInfo("fr-FR"), $"Temperature: {temp:F}"))
    End Sub
End Module
' The example displays the following output:
'       22.00°C
'       Temperature: 295.15K
'       Temperature: 71.60°F
'       Temperature: 71,60°F

Bileşik biçimlendirme

ve StringBuilder.AppendFormatgibi String.Format bazı yöntemler bileşik biçimlendirmeyi destekler. Bileşik biçim dizesi sıfır, bir veya daha fazla nesnenin dize gösterimini içeren tek bir dize döndüren bir şablon türüdür. Her nesne bileşik biçim dizesinde dizinlenmiş biçim öğesiyle gösterilir. Biçim öğesinin dizini, yönteminin parametre listesinde temsil ettiği nesnenin konumuna karşılık gelir. Dizinler sıfır tabanlıdır. Örneğin, yöntemine String.Format yapılan aşağıdaki çağrıda, ilk biçim öğesi {0:D}, öğesinin thatDatedize gösterimiyle değiştirilir; ikinci biçim öğesi {1}, öğesinin item1dize gösterimiyle, üçüncü biçim öğesi {2:C2}ise öğesinin item1.Valuedize gösterimiyle değiştirilir.

result = String.Format("On {0:d}, the inventory of {1} was worth {2:C2}.",
                       thatDate, item1, item1.Value);
Console.WriteLine(result);
// The example displays output like the following if run on a system
// whose current culture is en-US:
//       On 5/1/2009, the inventory of WidgetA was worth $107.44.
result = String.Format("On {0:d}, the inventory of {1} was worth {2:C2}.",
                       thatDate, item1, item1.Value)
Console.WriteLine(result)
' The example displays output like the following if run on a system
' whose current culture is en-US:
'       On 5/1/2009, the inventory of WidgetA was worth $107.44.

Biçim öğesini karşılık gelen nesnesinin dize gösterimiyle değiştirmenin yanı sıra, biçim öğeleri de aşağıdakileri denetlemenize olanak sağlar:

  • Nesne arabirimini uyguluyorsa ve biçim dizelerini destekliyorsa, nesnenin IFormattable dize olarak temsil edilen özel yolu. Bunu, biçim öğesinin dizinini geçerli bir : biçim dizesiyle (iki nokta üst üste) takip ederek yaparsınız. Önceki örnekte bu, bir tarih değerini "d" (kısa tarih deseni) biçim dizesiyle (örn. {0:d}) ve sayısal bir değeri "C2" biçim dizesiyle biçimlendirerek (örneğin, {2:C2} sayıyı iki kesirli ondalık basamağı olan bir para birimi değeri olarak göstermek üzere) biçimlendirerek yapmıştır.

  • Nesnenin dize gösterimini içeren alanın genişliği ve bu alandaki dize gösteriminin hizalaması. Bunu, biçim öğesinin dizinini alan genişliğine , (virgül) göre takip ederek yaparsınız. Alan genişliği pozitif bir değerse dize alanda sağa hizalanır ve alan genişliği negatif bir değerse sola hizalanır. Aşağıdaki örnek, 20 karakterlik bir alandaki tarih değerlerini sola hizalar ve ondalık değerleri 11 karakterlik bir alanda bir kesirli basamakla sağa hizalar.

    DateTime startDate = new DateTime(2015, 8, 28, 6, 0, 0);
    decimal[] temps = { 73.452m, 68.98m, 72.6m, 69.24563m,
                       74.1m, 72.156m, 72.228m };
    Console.WriteLine("{0,-20} {1,11}\n", "Date", "Temperature");
    for (int ctr = 0; ctr < temps.Length; ctr++)
       Console.WriteLine("{0,-20:g} {1,11:N1}", startDate.AddDays(ctr), temps[ctr]);
    
    // The example displays the following output:
    //       Date                 Temperature
    //
    //       8/28/2015 6:00 AM           73.5
    //       8/29/2015 6:00 AM           69.0
    //       8/30/2015 6:00 AM           72.6
    //       8/31/2015 6:00 AM           69.2
    //       9/1/2015 6:00 AM            74.1
    //       9/2/2015 6:00 AM            72.2
    //       9/3/2015 6:00 AM            72.2
    
    Dim startDate As New Date(2015, 8, 28, 6, 0, 0)
    Dim temps() As Decimal = {73.452, 68.98, 72.6, 69.24563,
                               74.1, 72.156, 72.228}
    Console.WriteLine("{0,-20} {1,11}", "Date", "Temperature")
    Console.WriteLine()
    For ctr As Integer = 0 To temps.Length - 1
        Console.WriteLine("{0,-20:g} {1,11:N1}", startDate.AddDays(ctr), temps(ctr))
    Next
    ' The example displays the following output:
    '       Date                 Temperature
    '
    '       8/28/2015 6:00 AM           73.5
    '       8/29/2015 6:00 AM           69.0
    '       8/30/2015 6:00 AM           72.6
    '       8/31/2015 6:00 AM           69.2
    '       9/1/2015 6:00 AM            74.1
    '       9/2/2015 6:00 AM            72.2
    '       9/3/2015 6:00 AM            72.2
    

    Hem hizalama dizesi bileşeni hem de biçim dizesi bileşeni varsa, öncekinin ikinci bileşenden önce geldiğini unutmayın (örneğin, {0,-20:g}.

Bileşik biçimlendirme hakkında daha fazla bilgi için bkz . Bileşik Biçimlendirme.

ICustomFormatter ile özel biçimlendirme

ve olmak üzere iki bileşik biçimlendirme yöntemi, String.Format(IFormatProvider, String, Object[])StringBuilder.AppendFormat(IFormatProvider, String, Object[])özel biçimlendirmeyi destekleyen bir biçim sağlayıcısı parametresi içerir. Bu biçimlendirme yöntemlerinden biri çağrıldığında, biçim sağlayıcısının GetFormat yöntemine bir arabirimi temsil eden bir ICustomFormatter nesne geçirirType. Yöntemi GetFormat daha sonra özel biçimlendirme sağlayan uygulamayı döndürmekten ICustomFormatter sorumludur.

Arabirim ICustomFormatter , Format(String, Object, IFormatProvider)bileşik biçim dizesindeki her biçim öğesi için bir kez bileşik biçimlendirme yöntemi tarafından otomatik olarak çağrılan tek bir yöntemine sahiptir. yönteminin Format(String, Object, IFormatProvider) üç parametresi vardır: bir biçim öğesindeki bağımsız değişkeni temsil formatString eden bir biçim dizesi, biçimlendirilen bir nesne ve biçimlendirme hizmetleri sağlayan bir IFormatProvider nesne. Genellikle, uygulayan ICustomFormatter sınıf da uygular IFormatProvider, bu nedenle bu son parametre özel biçimlendirme sınıfının kendisine bir başvurudur. yöntemi, biçimlendirilecek nesnenin özel biçimlendirilmiş dize gösterimini döndürür. Yöntemi nesneyi biçimlendiremezse, null başvuru döndürmelidir (Nothing Visual Basic'te).

Aşağıdaki örnek, tamsayı değerlerini iki basamaklı onaltılık değerlerin ve ardından boşluk dizisi olarak görüntüleyen adlı ByteByByteFormatter bir uygulama sağlarICustomFormatter.

public class ByteByByteFormatter : IFormatProvider, ICustomFormatter
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(string format, object arg,
                          IFormatProvider formatProvider)
   {
      if (! formatProvider.Equals(this)) return null;

      // Handle only hexadecimal format string.
      if (! format.StartsWith("X")) return null;

      byte[] bytes;
      string output = null;

      // Handle only integral types.
      if (arg is Byte)
         bytes = BitConverter.GetBytes((Byte) arg);
      else if (arg is Int16)
         bytes = BitConverter.GetBytes((Int16) arg);
      else if (arg is Int32)
         bytes = BitConverter.GetBytes((Int32) arg);
      else if (arg is Int64)
         bytes = BitConverter.GetBytes((Int64) arg);
      else if (arg is SByte)
         bytes = BitConverter.GetBytes((SByte) arg);
      else if (arg is UInt16)
         bytes = BitConverter.GetBytes((UInt16) arg);
      else if (arg is UInt32)
         bytes = BitConverter.GetBytes((UInt32) arg);
      else if (arg is UInt64)
         bytes = BitConverter.GetBytes((UInt64) arg);
      else
         return null;

      for (int ctr = bytes.Length - 1; ctr >= 0; ctr--)
         output += String.Format("{0:X2} ", bytes[ctr]);

      return output.Trim();
   }
}
Public Class ByteByByteFormatter : Implements IFormatProvider, ICustomFormatter
    Public Function GetFormat(formatType As Type) As Object _
                    Implements IFormatProvider.GetFormat
        If formatType Is GetType(ICustomFormatter) Then
            Return Me
        Else
            Return Nothing
        End If
    End Function

    Public Function Format(fmt As String, arg As Object,
                           formatProvider As IFormatProvider) As String _
                           Implements ICustomFormatter.Format

        If Not formatProvider.Equals(Me) Then Return Nothing

        ' Handle only hexadecimal format string.
        If Not fmt.StartsWith("X") Then
            Return Nothing
        End If

        ' Handle only integral types.
        If Not typeof arg Is Byte AndAlso
           Not typeof arg Is Int16 AndAlso
           Not typeof arg Is Int32 AndAlso
           Not typeof arg Is Int64 AndAlso
           Not typeof arg Is SByte AndAlso
           Not typeof arg Is UInt16 AndAlso
           Not typeof arg Is UInt32 AndAlso
           Not typeof arg Is UInt64 Then _
              Return Nothing

        Dim bytes() As Byte = BitConverter.GetBytes(arg)
        Dim output As String = Nothing

        For ctr As Integer = bytes.Length - 1 To 0 Step -1
            output += String.Format("{0:X2} ", bytes(ctr))
        Next

        Return output.Trim()
    End Function
End Class

Aşağıdaki örnek, tamsayı değerlerini biçimlendirmek için sınıfını ByteByByteFormatter kullanır. İkinci yöntem çağrısında String.Format(IFormatProvider, String, Object[]) yönteminin ICustomFormatter.Format birden çok kez çağrıldığını ve varsayılan NumberFormatInfo sağlayıcının, nedeniyle üçüncü yöntem çağrısında kullanıldığını unutmayın.ByteByByteFormatter.Format yöntemi "N0" biçim dizesini tanımaz ve null başvuru döndürür (Nothing Visual Basic'te).

public class Example10
{
   public static void Main()
   {
      long value = 3210662321;
      byte value1 = 214;
      byte value2 = 19;

      Console.WriteLine(String.Format(new ByteByByteFormatter(), "{0:X}", value));
      Console.WriteLine(String.Format(new ByteByByteFormatter(), "{0:X} And {1:X} = {2:X} ({2:000})",
                                      value1, value2, value1 & value2));
      Console.WriteLine(String.Format(new ByteByByteFormatter(), "{0,10:N0}", value));
   }
}
// The example displays the following output:
//       00 00 00 00 BF 5E D1 B1
//       00 D6 And 00 13 = 00 12 (018)
//       3,210,662,321
Public Module Example10
    Public Sub Main10()
        Dim value As Long = 3210662321
        Dim value1 As Byte = 214
        Dim value2 As Byte = 19

        Console.WriteLine((String.Format(New ByteByByteFormatter(), "{0:X}", value)))
        Console.WriteLine((String.Format(New ByteByByteFormatter(), "{0:X} And {1:X} = {2:X} ({2:000})",
                                        value1, value2, value1 And value2)))
        Console.WriteLine(String.Format(New ByteByByteFormatter(), "{0,10:N0}", value))
    End Sub
End Module
' The example displays the following output:
'       00 00 00 00 BF 5E D1 B1
'       00 D6 And 00 13 = 00 12 (018)
'       3,210,662,321

Ayrıca bkz.

Başlık Tanım
Standart Sayısal Biçim Dizeleri Sayısal değerlerin yaygın olarak kullanılan dize gösterimlerini oluşturan standart biçim dizelerini açıklar.
Özel Sayısal Biçim Dizeleri Sayısal değerler için uygulamaya özgü biçimler oluşturan özel biçim dizelerini açıklar.
Standart Tarih ve Saat Biçim Dizeleri Değerlerin yaygın olarak kullanılan dize gösterimlerini oluşturan standart biçim dizelerini DateTime açıklar.
Özel Tarih ve Saat Biçim Dizeleri Değerler için DateTime uygulamaya özgü biçimler oluşturan özel biçim dizelerini açıklar.
Standart TimeSpan Biçim Dizeleri Zaman aralıklarının yaygın olarak kullanılan dize gösterimlerini oluşturan standart biçim dizelerini açıklar.
Özel TimeSpan Biçim Dizeleri Zaman aralıkları için uygulamaya özgü biçimler oluşturan özel biçim dizelerini açıklar.
Sabit Listesi Biçim Dizeleri Numaralandırma değerlerinin dize gösterimlerini oluşturmak için kullanılan standart biçim dizelerini açıklar.
Bileşik Biçimlendirme Bir dizeye bir veya daha fazla biçimlendirilmiş değerin nasıl eklenip eklenmediği açıklanır. Dize daha sonra konsolda görüntülenebilir veya bir akışa yazılabilir.
Dizeleri Ayrıştırma Bu nesnelerin dize gösterimleri tarafından açıklanan değerlerde nesnelerin nasıl başlatıldığını açıklar. Ayrıştırma, biçimlendirmenin ters işlemidir.

Başvuru