Object.ToString Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí řetězec, který představuje aktuální objekt.
public:
virtual System::String ^ ToString();
public virtual string ToString ();
public virtual string? ToString ();
abstract member ToString : unit -> string
override this.ToString : unit -> string
Public Overridable Function ToString () As String
Návraty
Řetězec, který představuje aktuální objekt.
Poznámky
Object.ToString je hlavní metoda formátování v rozhraní .NET Framework. Převede objekt na jeho řetězcovou reprezentaci, aby byl vhodný pro zobrazení. (Informace o podpoře formátování v rozhraní .NET Framework najdete v tématu Typy formátování.) Výchozí implementace Object.ToString metody vrací plně kvalifikovaný název typu objektu.
Důležité
Na tuto stránku jste se možná dostali pomocí odkazu ze seznamu členů jiného typu. Je to proto, že tento typ nepřepíše Object.ToString. Místo toho dědí funkce Object.ToString metody.
Typy často přepíší metodu Object.ToString , aby poskytovaly vhodnější řetězcovou reprezentaci určitého typu. Typy také často přetěžují metodu Object.ToString , aby poskytovaly podporu pro formátovací řetězce nebo formátování citlivé na jazykovou verzi.
V této části:
Výchozí metoda Object.ToString()
Přepsání metody Object.ToString()
Přetížení metody ToString
Rozšíření metody Object.ToString
Poznámky k prostředí Windows Runtime
Výchozí metoda Object.ToString()
Výchozí implementace ToString metody vrátí plně kvalifikovaný název typu Object, jak ukazuje následující příklad.
using namespace System;
void main()
{
Object^ obj = gcnew Object();
Console::WriteLine(obj->ToString());
}
// The example displays the following output:
// System.Object
Object obj = new Object();
Console.WriteLine(obj.ToString());
// The example displays the following output:
// System.Object
let obj = obj ()
printfn $"{obj.ToString()}"
// printfn $"{obj}" // Equivalent
// The example displays the following output:
// System.Object
Module Example
Public Sub Main()
Dim obj As New Object()
Console.WriteLine(obj.ToString())
End Sub
End Module
' The example displays the following output:
' System.Object
Vzhledem k tomu Object , že je základní třída všech typů odkazů v rozhraní .NET Framework, toto chování je zděděno odkazovými typy, které nepřepíší metodu ToString . Toto dokládá následující příklad. Definuje třídu s názvem Object1
, která přijímá výchozí implementaci všech Object členů. Jeho ToString metoda vrátí plně kvalifikovaný název typu objektu.
using namespace System;
namespace Examples
{
ref class Object1
{
};
}
void main()
{
Object^ obj1 = gcnew Examples::Object1();
Console::WriteLine(obj1->ToString());
}
// The example displays the following output:
// Examples.Object1
using System;
using Examples;
namespace Examples
{
public class Object1
{
}
}
public class Example
{
public static void Main()
{
object obj1 = new Object1();
Console.WriteLine(obj1.ToString());
}
}
// The example displays the following output:
// Examples.Object1
type Object1() = class end
let obj1 = Object1()
printfn $"{obj1.ToString()}"
// The example displays the following output:
// Examples.Object1
Imports Examples
Namespace Examples
Public Class Object1
End Class
End Namespace
Module Example
Public Sub Main()
Dim obj1 As New Object1()
Console.WriteLine(obj1.ToString())
End Sub
End Module
' The example displays the following output:
' Examples.Object1
Přepsání metody Object.ToString()
Typy obvykle přepíší metodu Object.ToString , aby vrátila řetězec, který představuje instanci objektu. Například základní typy, jako Charje , Int32a String poskytují ToString implementace, které vrací řetězcovou formu hodnoty, kterou objekt představuje. Následující příklad definuje třídu , Object2
která přepíše metodu ToString , aby vrátila název typu spolu s jeho hodnotou.
using namespace System;
ref class Object2
{
private:
Object^ value;
public:
Object2(Object^ value)
{
this->value = value;
}
virtual String^ ToString() override
{
return Object::ToString() + ": " + value->ToString();
}
};
void main()
{
Object2^ obj2 = gcnew Object2(L'a');
Console::WriteLine(obj2->ToString());
}
// The example displays the following output:
// Object2: a
using System;
public class Object2
{
private object value;
public Object2(object value)
{
this.value = value;
}
public override string ToString()
{
return base.ToString() + ": " + value.ToString();
}
}
public class Example
{
public static void Main()
{
Object2 obj2 = new Object2('a');
Console.WriteLine(obj2.ToString());
}
}
// The example displays the following output:
// Object2: a
type Object2(value: obj) =
inherit obj ()
override _.ToString() =
base.ToString() + ": " + value.ToString()
let obj2 = Object2 'a'
printfn $"{obj2.ToString()}"
// The example displays the following output:
// Object2: a
Public Class Object2
Private value As Object
Public Sub New(value As Object)
Me.value = value
End Sub
Public Overrides Function ToString() As String
Return MyBase.ToString + ": " + value.ToString()
End Function
End Class
Module Example
Public Sub Main()
Dim obj2 As New Object2("a"c)
Console.WriteLine(obj2.ToString())
End Sub
End Module
' The example displays the following output:
' Object2: a
Následující tabulka uvádí kategorie typů v .NET a určuje, zda přepíší metodu Object.ToString .
Kategorie typů | Overrides Object.ToString() | Chování |
---|---|---|
Třída | Není k dispozici | Není k dispozici |
Struktura | Ano (ValueType.ToString) | Stejné jako Object.ToString() |
Výčet | Ano (Enum.ToString()) | Jméno člena |
Rozhraní | No | Není k dispozici |
Delegát | No | Není k dispozici |
Další informace o přepsání najdete v části Poznámky k dědíkům ToString.
Přetížení metody ToString
Kromě přepsání bezparametrové Object.ToString() metody mnoho typů přetěžuje metodu ToString
tak, aby poskytovaly verze metody, které přijímají parametry. Nejčastěji se to provádí kvůli podpoře formátování proměnných a formátování citlivých na jazykovou verzi.
Následující příklad přetíží metodu ToString
tak, aby vrátila výsledný řetězec, který obsahuje hodnotu různých polí Automobile
třídy. Definuje čtyři řetězce formátu: G, který vrátí název modelu a rok; D, která vrátí název modelu, rok a počet dveří; C, který vrátí název modelu, rok a počet válců; a A, které vrátí řetězec se všemi čtyřmi hodnotami pole.
using System;
public class Automobile
{
private int _doors;
private string _cylinders;
private int _year;
private string _model;
public Automobile(string model, int year , int doors,
string cylinders)
{
_model = model;
_year = year;
_doors = doors;
_cylinders = cylinders;
}
public int Doors
{ get { return _doors; } }
public string Model
{ get { return _model; } }
public int Year
{ get { return _year; } }
public string Cylinders
{ get { return _cylinders; } }
public override string ToString()
{
return ToString("G");
}
public string ToString(string fmt)
{
if (string.IsNullOrEmpty(fmt))
fmt = "G";
switch (fmt.ToUpperInvariant())
{
case "G":
return string.Format("{0} {1}", _year, _model);
case "D":
return string.Format("{0} {1}, {2} dr.",
_year, _model, _doors);
case "C":
return string.Format("{0} {1}, {2}",
_year, _model, _cylinders);
case "A":
return string.Format("{0} {1}, {2} dr. {3}",
_year, _model, _doors, _cylinders);
default:
string msg = string.Format("'{0}' is an invalid format string",
fmt);
throw new ArgumentException(msg);
}
}
}
public class Example
{
public static void Main()
{
var auto = new Automobile("Lynx", 2016, 4, "V8");
Console.WriteLine(auto.ToString());
Console.WriteLine(auto.ToString("A"));
}
}
// The example displays the following output:
// 2016 Lynx
// 2016 Lynx, 4 dr. V8
open System
type Automobile(model: string, year: int, doors: int, cylinders: string) =
member _.Doors = doors
member _.Model = model
member _.Year = year
member _.Cylinders = cylinders
override this.ToString() =
this.ToString "G"
member _.ToString(fmt) =
let fmt =
if String.IsNullOrEmpty fmt then "G"
else fmt.ToUpperInvariant()
match fmt with
| "G" ->
$"{year} {model}"
| "D" ->
$"{year} {model}, {doors} dr."
| "C" ->
$"{year} {model}, {cylinders}"
| "A" ->
$"{year} {model}, {doors} dr. {cylinders}"
| _ ->
raise (ArgumentException $"'{fmt}' is an invalid format string")
let auto = Automobile("Lynx", 2016, 4, "V8")
printfn $"{auto}"
printfn $"""{auto.ToString "A"}"""
// The example displays the following output:
// 2016 Lynx
// 2016 Lynx, 4 dr. V8
Public Class Automobile
Private _doors As Integer
Private _cylinders As String
Private _year As Integer
Private _model As String
Public Sub New(model As String, year As Integer, doors As Integer,
cylinders As String)
_model = model
_year = year
_doors = doors
_cylinders = cylinders
End Sub
Public ReadOnly Property Doors As Integer
Get
Return _doors
End Get
End Property
Public ReadOnly Property Model As String
Get
Return _model
End Get
End Property
Public ReadOnly Property Year As Integer
Get
Return _year
End Get
End Property
Public ReadOnly Property Cylinders As String
Get
Return _cylinders
End Get
End Property
Public Overrides Function ToString() As String
Return ToString("G")
End Function
Public Overloads Function ToString(fmt As String) As String
If String.IsNullOrEmpty(fmt) Then fmt = "G"
Select Case fmt.ToUpperInvariant()
Case "G"
Return String.Format("{0} {1}", _year, _model)
Case "D"
Return String.Format("{0} {1}, {2} dr.",
_year, _model, _doors)
Case "C"
Return String.Format("{0} {1}, {2}",
_year, _model, _cylinders)
Case "A"
Return String.Format("{0} {1}, {2} dr. {3}",
_year, _model, _doors, _cylinders)
Case Else
Dim msg As String = String.Format("'{0}' is an invalid format string",
fmt)
Throw New ArgumentException(msg)
End Select
End Function
End Class
Module Example
Public Sub Main()
Dim auto As New Automobile("Lynx", 2016, 4, "V8")
Console.WriteLine(auto.ToString())
Console.WriteLine(auto.ToString("A"))
End Sub
End Module
' The example displays the following output:
' 2016 Lynx
' 2016 Lynx, 4 dr. V8
Následující příklad volá přetíženou Decimal.ToString(String, IFormatProvider) metodu pro zobrazení jazykového formátování hodnoty měny.
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
string[] cultureNames = { "en-US", "en-GB", "fr-FR",
"hr-HR", "ja-JP" };
Decimal value = 1603.49m;
foreach (var cultureName in cultureNames) {
CultureInfo culture = new CultureInfo(cultureName);
Console.WriteLine("{0}: {1}", culture.Name,
value.ToString("C2", culture));
}
}
}
// The example displays the following output:
// en-US: $1,603.49
// en-GB: £1,603.49
// fr-FR: 1 603,49 €
// hr-HR: 1.603,49 kn
// ja-JP: ¥1,603.49
open System.Globalization
let cultureNames =
[| "en-US"; "en-GB"; "fr-FR"; "hr-HR"; "ja-JP" |]
let value = 1603.49m
for cultureName in cultureNames do
let culture = CultureInfo cultureName
printfn $"""{culture.Name}: {value.ToString("C2", culture)}"""
// The example displays the following output:
// en-US: $1,603.49
// en-GB: £1,603.49
// fr-FR: 1 603,49 €
// hr-HR: 1.603,49 kn
// ja-JP: ¥1,603.49
Imports System.Globalization
Module Example
Public Sub Main()
Dim cultureNames() As String = { "en-US", "en-GB", "fr-FR",
"hr-HR", "ja-JP" }
Dim value As Decimal = 1603.49d
For Each cultureName In cultureNames
Dim culture As New CultureInfo(cultureName)
Console.WriteLine("{0}: {1}", culture.Name,
value.ToString("C2", culture))
Next
End Sub
End Module
' The example displays the following output:
' en-US: $1,603.49
' en-GB: £1,603.49
' fr-FR: 1 603,49 €
' hr-HR: 1.603,49 kn
' ja-JP: ¥1,603.49
Další informace o formátových řetězcích a formátování citlivých na jazykovou verzi najdete v tématu Typy formátování. Formátovací řetězce podporované číselnými hodnotami najdete v tématech Řetězce standardního číselného formátu a Vlastní řetězce číselného formátu. Formátovací řetězce podporované hodnotami data a času najdete v tématu Standardní řetězce formátu data a času a Vlastní řetězce formátu data a času.
Rozšíření metody Object.ToString
Vzhledem k tomu, že typ zdědí výchozí Object.ToString metodu, může být jeho chování nežádoucí a chcete ho změnit. To platí zejména pro pole a třídy kolekcí. I když můžete očekávat, že ToString
metoda třídy pole nebo kolekce zobrazí hodnoty svých členů, místo toho zobrazí typ plně kvalifikovaný název typu, jak ukazuje následující příklad.
int[] values = { 1, 2, 4, 8, 16, 32, 64, 128 };
Console.WriteLine(values.ToString());
List<int> list = new List<int>(values);
Console.WriteLine(list.ToString());
// The example displays the following output:
// System.Int32[]
// System.Collections.Generic.List`1[System.Int32]
let values = [| 1; 2; 4; 8; 16; 32; 64; 128 |]
printfn $"{values}"
let list = ResizeArray values
printfn $"{list}"
// The example displays the following output:
// System.Int32[]
// System.Collections.Generic.List`1[System.Int32]
Imports System.Collections.Generic
Module Example
Public Sub Main()
Dim values() As Integer = { 1, 2, 4, 8, 16, 32, 64, 128 }
Console.WriteLine(values.ToString())
Dim list As New List(Of Integer)(values)
Console.WriteLine(list.ToString())
End Sub
End Module
' The example displays the following output:
' System.Int32[]
' System.Collections.Generic.List`1[System.Int32]
Máte několik možností, jak vytvořit výsledný řetězec, který chcete.
Pokud je typem pole, objekt kolekce nebo objekt, který implementuje IEnumerable rozhraní nebo IEnumerable<T> , můžete vytvořit výčet jeho prvků pomocí
foreach
příkazu v jazyce C# nebo konstruktoruFor Each...Next
v jazyce Visual Basic.Pokud třída není
sealed
(v jazyce C#) neboNotInheritable
(v jazyce Visual Basic), můžete vyvinout třídu obálky, která dědí ze základní třídy, jejíž Object.ToString metodu chcete přizpůsobit. To vyžaduje minimálně následující:Implementujte všechny potřebné konstruktory. Odvozené třídy nedědí své konstruktory základní třídy.
Přepište metodu Object.ToString , aby se vrátil požadovaný výsledný řetězec.
Následující příklad definuje třídu obálky pro List<T> třídu. Přepíše metodu Object.ToString , aby zobrazila hodnotu každé metody kolekce místo plně kvalifikovaného názvu typu.
using System; using System.Collections.Generic; public class CList<T> : List<T> { public CList(IEnumerable<T> collection) : base(collection) { } public CList() : base() {} public override string ToString() { string retVal = string.Empty; foreach (T item in this) { if (string.IsNullOrEmpty(retVal)) retVal += item.ToString(); else retVal += string.Format(", {0}", item); } return retVal; } } public class Example { public static void Main() { var list2 = new CList<int>(); list2.Add(1000); list2.Add(2000); Console.WriteLine(list2.ToString()); } } // The example displays the following output: // 1000, 2000
open System open System.Collections.Generic type CList<'T>() = inherit ResizeArray<'T>() override this.ToString() = let mutable retVal = String.Empty for item in this do if String.IsNullOrEmpty retVal then retVal <- retVal + string item else retVal <- retVal + $", {item}" retVal let list2 = CList() list2.Add 1000 list2.Add 2000 printfn $"{list2}" // The example displays the following output: // 1000, 2000
Imports System.Collections.Generic Public Class CList(Of T) : Inherits List(Of T) Public Sub New(capacity As Integer) MyBase.New(capacity) End Sub Public Sub New(collection As IEnumerable(Of T)) MyBase.New(collection) End Sub Public Sub New() MyBase.New() End Sub Public Overrides Function ToString() As String Dim retVal As String = String.Empty For Each item As T In Me If String.IsNullOrEmpty(retval) Then retVal += item.ToString() Else retval += String.Format(", {0}", item) End If Next Return retVal End Function End Class Module Example Public Sub Main() Dim list2 As New CList(Of Integer) list2.Add(1000) list2.Add(2000) Console.WriteLine(list2.ToString()) End Sub End Module ' The example displays the following output: ' 1000, 2000
Vytvořte rozšiřující metodu , která vrátí požadovaný výsledný řetězec. Všimněte si, že tímto způsobem nemůžete přepsat výchozí Object.ToString metodu (to znamená, že vaše třída rozšíření (v jazyce C#) nebo modul (v jazyce Visual Basic) nemůže mít metodu bez parametrů s názvem
ToString
, která je volána místo metody původního typuToString
. Pro nahrazení bezToString
parametrů budete muset zadat jiný název.Následující příklad definuje dvě metody, které rozšiřují List<T> třídu: metodu bez
ToString2
parametrů a metoduToString
s parametrem String , který představuje formátovací řetězec.using System; using System.Collections.Generic; public static class StringExtensions { public static string ToString2<T>(this List<T> l) { string retVal = string.Empty; foreach (T item in l) retVal += string.Format("{0}{1}", string.IsNullOrEmpty(retVal) ? "" : ", ", item); return string.IsNullOrEmpty(retVal) ? "{}" : "{ " + retVal + " }"; } public static string ToString<T>(this List<T> l, string fmt) { string retVal = string.Empty; foreach (T item in l) { IFormattable ifmt = item as IFormattable; if (ifmt != null) retVal += string.Format("{0}{1}", string.IsNullOrEmpty(retVal) ? "" : ", ", ifmt.ToString(fmt, null)); else retVal += ToString2(l); } return string.IsNullOrEmpty(retVal) ? "{}" : "{ " + retVal + " }"; } } public class Example { public static void Main() { List<int> list = new List<int>(); list.Add(1000); list.Add(2000); Console.WriteLine(list.ToString2()); Console.WriteLine(list.ToString("N0")); } } // The example displays the following output: // { 1000, 2000 } // { 1,000, 2,000 }
open System open System.Collections.Generic type List<'T> with member this.ToString2<'T>() = let mutable retVal = String.Empty for item in this do retVal <- retVal + $"""{if String.IsNullOrEmpty retVal then "" else ", "}{item}""" if String.IsNullOrEmpty retVal then "{}" else "{ " + retVal + " }" member this.ToString<'T>(fmt: string) = let mutable retVal = String.Empty for item in this do match box item with | :? IFormattable as ifmt -> retVal <- retVal + $"""{if String.IsNullOrEmpty retVal then "" else ", "}{ifmt.ToString(fmt, null)}""" | _ -> retVal <- retVal + this.ToString2() if String.IsNullOrEmpty retVal then "{}" else "{ " + retVal + " }" let list = ResizeArray() list.Add 1000 list.Add 2000 printfn $"{list.ToString2()}" printfn $"""{list.ToString "N0"}""" // The example displays the following output: // { 1000, 2000 } // { 1,000, 2,000 }
Imports System.Collections.Generic Imports System.Runtime.CompilerServices Public Module StringExtensions <Extension()> Public Function ToString2(Of T)(l As List(Of T)) As String Dim retVal As String = "" For Each item As T In l retVal += String.Format("{0}{1}", If(String.IsNullOrEmpty(retVal), "", ", "), item) Next Return If(String.IsNullOrEmpty(retVal), "{}", "{ " + retVal + " }") End Function <Extension()> Public Function ToString(Of T)(l As List(Of T), fmt As String) As String Dim retVal As String = String.Empty For Each item In l Dim ifmt As IFormattable = TryCast(item, IFormattable) If ifmt IsNot Nothing Then retVal += String.Format("{0}{1}", If(String.IsNullOrEmpty(retval), "", ", "), ifmt.ToString(fmt, Nothing)) Else retVal += ToString2(l) End If Next Return If(String.IsNullOrEmpty(retVal), "{}", "{ " + retVal + " }") End Function End Module Module Example Public Sub Main() Dim list As New List(Of Integer) list.Add(1000) list.Add(2000) Console.WriteLine(list.ToString2()) Console.WriteLine(list.ToString("N0")) End Sub End Module ' The example displays the following output: ' { 1000, 2000 } ' { 1,000, 2,000 }
Poznámky k prostředí Windows Runtime
Když voláte metodu ToString pro třídu v prostředí Windows Runtime, poskytuje výchozí chování pro třídy, které nepřepíší ToString. To je součást podpory, kterou rozhraní .NET Framework poskytuje pro prostředí Windows Runtime (viz Podpora rozhraní .NET Framework pro aplikace a prostředí Windows Runtime pro Windows Store). Třídy v prostředí Windows Runtime nedědí Objecta ne vždy implementují ToString. Při použití v kódu jazyka C# nebo Visual Basic se však vždy zdá, že mají ToStringmetody , Equals(Object)GetHashCode a a rozhraní .NET Framework poskytuje pro tyto metody výchozí chování.
Počínaje rozhraním .NET Framework 4.5.1 používá modul CLR (Common Language Runtime) U objektu prostředí Windows Runtime IStringable.ToString před návratem k výchozí implementaci .Object.ToString
Poznámka
prostředí Windows Runtime třídy napsané v jazyce C# nebo Visual Basic mohou přepsat metoduToString.
Prostředí Windows Runtime a rozhraní IStringable
Počínaje Windows 8.1 prostředí Windows Runtime obsahuje rozhraní IStringable, jehož jedna metoda, IStringable.ToString, poskytuje základní podporu formátování srovnatelnou s podporou poskytovanou nástrojem Object.ToString. Chcete-li zabránit nejednoznačnosti, neměli byste implementovat IStringable u spravovaných typů.
Když jsou spravované objekty volána nativním kódem nebo kódem napsaným v jazycích, jako je JavaScript nebo C++/CX, zdá se, že implementují IStringable. Modul CLR (Common Language Runtime) automaticky směruje volání z IStringable.ToString do Object.ToString , pokud IStringable není implementováno ve spravovaném objektu.
Upozornění
Vzhledem k tomu, že modul CLR (Common Language Runtime) automaticky implementuje IStringable pro všechny spravované typy v aplikacích pro Windows Store, doporučujeme neposkytovat vlastní IStringable
implementaci. Implementace IStringable
může vést k nezamýšleným chováním při volání ToString
z prostředí Windows Runtime, C++/CX nebo JavaScriptu.
Pokud se rozhodnete implementovat IStringable ve veřejně spravovaném typu, který se exportuje v komponentě prostředí Windows Runtime, platí následující omezení:
Rozhraní IStringable můžete definovat pouze v relaci "class implements", a to následujícím způsobem:
public class NewClass : IStringable
Public Class NewClass : Implements IStringable
V rozhraní nelze implementovat IStringable .
Parametr nelze deklarovat jako typ IStringable.
IStringable nemůže být návratovým typem metody, vlastnosti nebo pole.
Implementaci IStringable nelze skrýt ze základních tříd pomocí definice metody, jako je například následující:
public class NewClass : IStringable { public new string ToString() { return "New ToString in NewClass"; } }
Místo toho IStringable.ToString implementace musí vždy přepsat základní třídy implementace. Implementaci
ToString
můžete skrýt pouze tak, že ji vyvoláte v instanci třídy silného typu.
Všimněte si, že za různých podmínek mohou volání z nativního kódu na spravovaný typ, který implementuje IStringable nebo skryje jeho tostring implementace, způsobit neočekávané chování.
Poznámky pro dědice
Při implementaci vlastních typů byste měli přepsat metodu ToString() , aby vrátila hodnoty, které jsou pro tyto typy smysluplné. Odvozené třídy, které vyžadují větší kontrolu nad formátováním, než ToString() poskytuje, mohou implementovat IFormattable rozhraní. Jeho ToString(String, IFormatProvider) metoda umožňuje definovat formátovací řetězce, které řídí formátování, a použít IFormatProvider objekt, který může poskytovat formátování specifické pro jazykovou verzi.
Přepsání ToString() metody by se mělo řídit těmito pokyny:
Vrácený řetězec by měl být přátelský a čitelný pro lidi.
Vrácený řetězec by měl jednoznačně identifikovat hodnotu instance objektu.
Vrácený řetězec by měl být co nejkratší, aby byl vhodný pro zobrazení ladicím programem.
Přepsání ToString() by nemělo vrátit Empty řetězec s hodnotou null.
Přepsání ToString() by nemělo vyvolat výjimku.
Pokud je řetězcová reprezentace instance citlivá na jazykovou verzi nebo může být formátována více způsoby, implementujte IFormattable rozhraní.
Pokud vrácený řetězec obsahuje citlivé informace, měli byste nejprve požadovat odpovídající oprávnění. Pokud poptávka uspěje, můžete citlivé informace vrátit. v opačném případě byste měli vrátit řetězec, který citlivé informace vylučuje.
Přepsání ToString() by nemělo mít žádné pozorovatelné vedlejší účinky, aby se zabránilo komplikacím při ladění. Například volání ToString() metody by nemělo měnit hodnotu polí instance.
Pokud váš typ implementuje metodu parsování (nebo
Parse
TryParse
metodu, konstruktor nebo jinou statickou metodu, která vytvoří instanci typu z řetězce), měli byste zajistit, aby byl řetězec vrácený ToString() metodou převeden na instanci objektu.
Platí pro
Viz také
Váš názor
Odeslat a zobrazit názory pro