Aracılığıyla paylaş


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östermek veya özgün veri türünü geri yüklemek için daha sonra seriden çıkarmaktır. Bu makalede .NET'in sağladığı biçimlendirme mekanizmaları tanıtılmaktadı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 makalenin Object.ToString devamında yer alan ToString Yöntemini Kullanarak Varsayılan Biçimlendirme bölümünde açıklanan yöntemin varsayılan uygulamasıdır. 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ğerine özel bir dize gösterimi tanımlamak için Object.ToString yöntemini geçersiz kılma. Daha fazla bilgi için bu makalenin 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 ifade, ABD İngilizcesi 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 IFormattable arabirimini uygulayarak dize dönüştürmeyi desteklemek hem de Convert sınıfı ile bileşik biçimlendirmeyi desteklemek. 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.

  • ICustomFormatter ve IFormatProvider'i uygulayarak eksiksiz bir özel biçimlendirme çözümü sağlamak. 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şturulduğunda ve ToString yöntemi çağrıldığında, sınıfın tür adını görüntüler. ToString yöntemi örnekte açıkça çağrılmaz. Console.WriteLine(Object) yöntemi, bağımsız değişken olarak geçirilen nesnenin ToString yöntemini örtük olarak çağırır.

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.ToStringIStringablesahip bir arabirim içerir. Ancak, yönetilen türlerin IStringable arabirimini uygulamamalarını tavsiye ederiz. Daha fazla bilgi için Windows Çalışma Zamanı ve IStringable Arayüzü'ne bakın.

Arabirimler dışındaki tüm türler Object tarafından tü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, ValueType'den devralır, bu da Object'den türetilmiştir. ValueType Object.ToString'i geçersiz kılsa da, 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 nesnesini tanımlar ve sıcaklığı Celsius cinsinden göstermek için ToString yöntemini geçersiz kılar.

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, her bir ilkel değer türünün yöntemi, nesnenin adını değil, değerini göstermek için geçersiz kılınmıştır. Aşağıdaki tabloda her temel tür için geçersiz kılma durumu gösterilmektedir. Geçersiz kılınan yöntemlerin çoğu, başka bir aşırı yüklenmiş ToString yöntemini çağırır 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çirir.

Tür ToString yöntemi geçersiz kılma
Boolean Boolean.TrueString veya Boolean.FalseString döndürür.
Byte Geçerli kültür için Byte.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla Byte çağrılır.
Char Karakteri string olarak döndürür.
DateTime DateTime.ToString("G", DatetimeFormatInfo.CurrentInfo), geçerli kültür için tarih ve saat değerini biçimlendirmek amacıyla çağrılır.
Decimal Geçerli kültür için Decimal.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla Decimal çağrılır.
Double Geçerli kültür için Double.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla Double çağrılır.
Int16 Geçerli kültür için Int16.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla Int16 çağrılır.
Int32 Geçerli kültür için Int32.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla Int32 çağrılır.
Int64 Geçerli kültür için Int64.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla Int64 çağrılır.
SByte Geçerli kültür için SByte.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla SByte çağrılır.
Single Geçerli kültür için Single.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla Single çağrılır.
UInt16 Geçerli kültür için UInt16.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla UInt16 çağrılır.
UInt32 Geçerli kültür için UInt32.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla UInt32 çağrılır.
UInt64 Geçerli kültür için UInt64.ToString("G", NumberFormatInfo.CurrentInfo) değerini biçimlendirmek amacıyla UInt64 çağrılır.

ToString yöntemi ve biçim dizeleri

Nesnenin tek bir dize gösterimi olduğunda, varsayılan ToString yöntemi kullanmak veya ToString yöntemini geçersiz kılmak 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. Kesinlik belirtici atlanırsa veya desteklenmiyorsa, standart biçim belirticisi 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.

  • CurrencyNegativePattern veya CurrencyPositivePattern özelliği, aşağıdakileri belirleyen bir tamsayı döndürür:

    • 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 noktasının solundaki her gruptaki basamak sayısını tanımlayan özellik.

  • Negatif NegativeSign değerleri belirtmek için parantezler kullanılmadıysa 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:     {date1:D}");
      string longPattern = CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern;
      Console.WriteLine($"'{longPattern}' custom format string:     {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 bir standart biçim tanımlayıcılarını tanımlayabilir ve bunların büyük/küçük harfe duyarlı mı yoksa duyarsız mı olduğunu belirleyebilirsiniz. Sizin ToString(String) yönteminizi uygulamanız 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, ToString(String) aşırı yüklemesini çağırmalı ve ona "G" standart biçim dizesini iletmelidir.

  • Null başvuruya eşit bir biçim belirticisi desteği (Visual Basic'te Nothing). 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, Decimal, Double, Int16, Int32, Int64, SByte, Single, UInt16, UInt32, UInt64, ve BigIntegerDateTime türleri), ayrıca DateTimeOffset, TimeSpan, Guid ve tüm numaralandırma türleri, biçim dizeleriyle biçimlendirmeyi destekler. Her tür tarafından desteklenen belirli biçim dizeleri hakkında bilgi için aşağıdaki makalelere 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 DateTime ve DateTimeOffset değerlerinin yaygın olarak kullanılan dize biçimlerini oluşturan standart biçim dizeleri açıklar.
Özel Tarih ve Saat Biçim Dizeleri DateTime ve DateTimeOffset değerleri için 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.
Numaralandırma 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ürlerin ve tarih ve saat türlerinin ToString yöntemine ait bir veya daha fazla aşırı yüklemeye parametre olarak sağlanan IFormatProvider arabirimi aracılığıyla erişilebilir hale getirilir. IFormatProvider uygulamaları kültüre özgü biçimlendirmeyi desteklemek için .NET'te kullanılır. Aşağıdaki örnek, bir nesnenin farklı kültürleri temsil eden üç IFormatProvider nesneyle biçimlendirildiğinde dize gösteriminin nasıl değiştiğini gösterir.

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. Eğer yöntem bu tür bir nesne sağlayabilirse, onu döndürür. Aksi takdirde, boş başvuru döndürür (Nothing Visual Basic'te).

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

Çeşitli biçimlendirme veya dize dönüştürme yöntemleri IFormatProvider türünde bir parametre içerir, ancak çoğu durumda yöntem çağrıldığında bu parametrenin değeri dikkate alınmaz. Aşağıdaki tabloda, parametreyi kullanan biçimlendirme yöntemlerinden bazıları ve bu yöntemlerin Type yöntemine geçirdikleri IFormatProvider.GetFormat nesnesinin türü yer alıyor.

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 IFormatProvider bir parametresi yoksa, bunun yerine CultureInfo.CurrentCulture özelliği tarafından 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, GetFormat yöntemine biçimlendirme bilgileri sağlaması gerekiyorsa, uygulamanızın ToString 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 durum, geçerli kültürü dört kez değiştiren ve ardından Decimal.ToString(String) yöntemini çağıran aşağıdaki örnekte gösterilmiştir. Her durumda, sonuç dizesi geçerli kültürün biçimlendirme kurallarını yansıtır. Bunun nedeni, ToString ve ToString(String) yöntemlerinin, her sayısal türün ToString(String, IFormatProvider) yöntemine yapılan çağrıları sarmalamasıdır.

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 €

Belirli bir kültür için sayısal değeri ToString parametresi olan bir aşırı yüklemeyi çağırarak ve provider parametresi ile aşağıdakilerden birini geçirerek 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 durum, geçerli kültürü dört kez değiştiren ve ardından DateTime.ToString(String) yöntemini çağıran aşağıdaki örnekte gösterilmiştir. Her durumda, sonuç dizesi geçerli kültürün biçimlendirme kurallarını yansıtır. Bunun nedeni, DateTime.ToString(), DateTime.ToString(String), DateTimeOffset.ToString() ve DateTimeOffset.ToString(String) yöntemlerinin, DateTime.ToString(String, IFormatProvider) ve DateTimeOffset.ToString(String, IFormatProvider) yöntemlerine yapılan çağrıları sarmalamasıdır.

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, parametre içeren DateTime.ToString veya DateTimeOffset.ToString aşırı yüklemesini çağırarak ve provider parametresini ya da aşağıdakilerden birini geçirerek, belirli bir kültür için tarih ve saat değerini formatlayabilirsiniz.

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, bir biçim dizesi ve ToString parametresi ile IFormatProvider yöntemini aşırı yükleyen türler, IFormattable arabirimini de 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, Temperature sınıfını ve IFormattable arabirimini uygulayan bir 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 Temperature nesnesini örnekler. Ardından yöntemini çağırır ve bir ToString nesnenin Temperature 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 IFormattable sınıfının Temperature uygulamasını çağırır.

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: {temp:K}");
        Console.WriteLine($"Temperature: {temp:F}");
        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

String.Format ve StringBuilder.AppendFormat gibi 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:

  • Bir nesne IFormattable arabirimini uyguluyorsa ve biçim dizelerini destekliyorsa, bu nesnenin bir dize olarak temsil edilme şekli. Bunu, biçim öğesinin dizinini geçerli bir : biçim dizesiyle (iki nokta üst üste) takip ederek yaparsınız. Önceki örnekte, bir tarih değerini "d" (kısa tarih deseni) biçim dizesiyle (örneğin, {0:d}) biçimlendirerek ve sayıyı iki kesirli ondalık basamağı olan bir para birimi değeri olarak göstermek üzere "C2" biçim dizesiyle (örneğin, {2:C2}) sayısal bir değeri biçimlendirerek bunu 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 bir , (virgül) ve ardından gelen alan genişliği ile 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, ilki ikinciden önce (ö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, bir Type nesnesi, bir ICustomFormatter arabirimini temsil ederek biçim sağlayıcısının GetFormat yöntemine geçirilir. GetFormat yöntemi, daha sonra özel biçimlendirme sağlayan ICustomFormatter uygulamasını döndürmekten sorumludur.

Arayüz ICustomFormatter, Format(String, Object, IFormatProvider) adlı otomatik olarak çağrılan tek bir yönteme sahiptir; bu yöntem, bileşik biçim dizesindeki her biçim öğesi için bileşik biçimlendirme yöntemi tarafından bir kez çağrılır. 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öntem nesneyi biçimlendiremezse, null referans geri 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ı ICustomFormatter bir uygulama sağlarByteByByteFormatter.

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 is not null) && !formatProvider.Equals(this)) return "";

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

        byte[] bytes;

        // Handle only integral types.
        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 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 "";

        string output= "";
        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. Metot ICustomFormatter.Format, ikinci String.Format(IFormatProvider, String, Object[]) metot çağrısında birden fazla kez çağrılır ve varsayılan NumberFormatInfo sağlayıcı üçüncü metot çağrısında kullanılır çünkü. 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 Yaygın olarak kullanılan DateTime değerlerinin dize gösterimlerini oluşturan standart biçim dizelerini 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.
Numaralandırma 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 Nesnelerin, bu nesnelerin dize gösterimleriyle açıklanan değerlere nasıl başlatıldığını açıklar. Ayrıştırma, biçimlendirmenin ters işlemidir.

Referans