ValueType.ToString Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Returns the fully qualified type name of this instance.
public:
override System::String ^ ToString();
public override string ToString ();
public override string? ToString ();
override this.ToString : unit -> string
Public Overrides Function ToString () As String
Returns
The fully qualified type name.
Remarks
The ValueType.ToString method overrides the Object.ToString method and provides the default implementation of the ToString
method for value types. (Value types are types defined by the struct
keyword in C#, and by the Structure
...End Structure
construct in Visual Basic.) Functionally, however, the implementation is that same as that of Object.ToString: the method returns the fully qualified type name.
Value types defined by the struct
keyword in C# and the Structure
...End Structure
construct in Visual Basic typically override the ValueType.ToString method to provide a more meaningful string representation of the value type. The following example illustrates the difference. It defines two value types, EmployeeA
and EmployeeB
, creates an instance of each, and calls its ToString
method. Because the EmployeeA
structure does not override the ValueType.ToString method, it displays only the fully qualified type name. The EmployeeB.ToString
method, on the other hand, provides meaningful information about the object.
using System;
using Corporate.EmployeeObjects;
public class Example
{
public static void Main()
{
var empA = new EmployeeA{ Name = "Robert",};
Console.WriteLine(empA.ToString());
var empB = new EmployeeB{ Name = "Robert",};
Console.WriteLine(empB.ToString());
}
}
namespace Corporate.EmployeeObjects
{
public struct EmployeeA
{
public String Name { get; set; }
}
public struct EmployeeB
{
public String Name { get; set; }
public override String ToString()
{
return Name;
}
}
}
// The example displays the following output:
// Corporate.EmployeeObjects.EmployeeA
// Robert
namespace Corporate.EmployeeObjects
[<Struct>]
type EmployeeA =
val mutable Name : string
[<Struct>]
type EmployeeB =
val mutable Name : string
override this.ToString() =
this.Name
module Example =
let empA = EmployeeA(Name="Robert")
printfn $"{empA}"
let empB = EmployeeB(Name="Robert")
printfn $"{empB}"
// The example displays the following output:
// Corporate.EmployeeObjects.EmployeeA
// Robert
Imports Corporate.EmployeeObjects
Module Example
Public Sub Main()
Dim empA As New EmployeeA With { .Name = "Robert" }
Console.WriteLine(empA.ToString())
Dim empB = new EmployeeB With { .Name = "Robert" }
Console.WriteLine(empB.ToString())
End Sub
End Module
Namespace Corporate.EmployeeObjects
Public Structure EmployeeA
Public Property Name As String
End Structure
Public Structure EmployeeB
Public Property Name As String
Public Overrides Function ToString() As String
Return Name
End Function
End Structure
End Namespace
' The example displays the following output:
' Corporate.EmployeeObjects.EmployeeA
' Robert
Note that, although enumeration types are also value types, they derive from the Enum class, which overrides ValueType.ToString.
Notes for the Windows Runtime
When you call the ToString method on a Windows Runtime structure, it provides the default behavior for value types that don't override ToString. This is part of the support that .NET provides for the Windows Runtime (see .NET Support for Windows Store Apps and Windows Runtime). Windows Runtime structures can't override ToString, even if they're written with C# or Visual Basic, because they can't have methods. (In addition, structures in the Windows Runtime itself don't inherit ValueType.) However, they appear to have ToString, Equals, and GetHashCode methods when you use them in your C# or Visual Basic code, and .NET provides the default behavior for these methods.