この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Object.ToString メソッド ()

 

公開日: 2016年10月

現在のオブジェクトを表す文字列を返します。

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

public virtual string ToString()

戻り値

Type: System.String

現在のオブジェクトを表す文字列。

Object.ToString メジャーは、.NET Framework のメソッドをフォーマットしています。 表示に適したように、オブジェクトを文字列形式に変換します。 (.NET Framework でのサポートを書式設定方法の詳細については、次を参照してください .NET Framework における型の書式設定。)。 既定の実装、 Object.ToString メソッドがオブジェクトの型の完全修飾名を取得します。

System_CAPS_important重要

別の型のメンバーの一覧からリンクからこのページに達している可能性があります。 これはその型をオーバーライドしないため Object.ToStringです。 機能を継承する代わりに、 Object.ToString メソッドです。

型は多くの場合、オーバーライド、 Object.ToString 特定の種類のより適切な文字列形式を提供するメソッドです。 型でも頻繁にオーバー ロード、 Object.ToString 書式指定文字列またはカルチャの書式設定のサポートを提供するメソッドです。

このセクションの内容:

既定の Object.ToString() メソッド
Object.ToString() メソッドをオーバーライドします。
ToString メソッドをオーバー ロード
Object.ToString メソッドを拡張します。
Windows ランタイムのノート

既定の実装、 ToString メソッドの型の完全修飾名を返します、 Object, 次の例を示します。

using System;

public class Example
{
   public static void Main()
   {
      Object obj = new Object();
      Console.WriteLine(obj.ToString());
   }
}
// The example displays the following output:
//      System.Object

Object すべての参照型の基本クラスは、.NET framework では、この動作はオーバーライドしない参照型によって継承、 ToString メソッドです。 次に例を示します。 という名前のクラスが定義 Object1 すべての既定の実装を受け入れる Object メンバーです。 その ToString メソッドは、オブジェクトの完全修飾型名を返します。

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

型は通常、オーバーライド、 Object.ToString オブジェクト インスタンスを表す文字列を返します。 基本型など、たとえば、 Char, 、Int32, 、および String 提供 ToString オブジェクトによって表される値の文字列形式を返す実装します。 次の例は、クラスを定義 Object2, 、オーバーライド、 ToString とその値の型名を返すメソッド。

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

次の表は、.NET Framework の種類のカテゴリを一覧表示し、それらを上書きするかどうかどうかを示す、 Object.ToString メソッドです。

型のカテゴリ

Object.ToString() をオーバーライドします。

動作

class

適用なし

適用なし

構造体

[はい] (ValueType.ToString)

Object.ToString() と同じ

列挙

[はい] (Enum.ToString())

メンバー名

interface

いいえ

適用なし

デリゲート

いいえ

適用なし

オーバーライドの詳細については、継承クラス」の注意を参照してください ToStringします。

パラメーターなしで上書きできるだけでなく Object.ToString() メソッドでは、さまざまな種類のオーバー ロード、 ToString メソッド パラメーターを受け取るメソッドのバージョンを提供します。 ほとんどの場合、これは変数の書式とカルチャの書式設定をサポートするためです。

次の例のオーバー ロード、 ToString のさまざまなフィールドの値を含む結果の文字列を返すメソッドを Automobile クラスです。 次の 4 つの書式指定文字列を定義します G、年月日、おモデル名が返されます。D で、モデルの名前、年、および; のドアの数を返しますC で、モデルの名前、年、およびシリンダー; の数を返しますA で、次の 4 つのフィールド値はすべて文字列として返します。

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

次の例では、オーバー ロードされた Decimal.ToString(String, IFormatProvider) カルチャが通貨値の書式を表示します。

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

書式指定文字列とカルチャの書式設定の詳細については、次を参照してください。 .NET Framework における型の書式設定します。 書式指定文字列を数値でサポートされている、次を参照してください。 標準の数値書式指定文字列カスタム数値書式指定文字列します。 日付と時刻の値でサポートされている書式指定文字列を参照してください。 標準の日時書式指定文字列カスタムの日付と時刻の書式指定文字列します。

型が既定値を継承しているため Object.ToString メソッド、望ましくない動作を検索して変更します、。 これは特に、配列とコレクション クラスです。 想定されるときに、 ToString メソッド配列またはコレクションのメンバーの値を表示するクラスの代わりに表示の種類の完全修飾型名は、次のようです。

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      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]

希望する結果の文字列を生成するいくつかのオプションがあります。

  • 型が、配列、コレクション オブジェクトまたはオブジェクトを実装する場合、 IEnumerable または IEnumerable<T> インターフェイスを使用してその要素を列挙することができます、 foreach c# でのステートメントまたは For Each...Next Visual Basic で作成します。

  • クラスがない場合 sealed (c#) のまたは NotInheritable の基本クラスから継承するラッパー クラスを開発する (Visual Basic の場合) で Object.ToString をカスタマイズする方法です。 少なくとも以下のこと、これが必要です。

    1. 必要なコンス トラクターを実装します。 派生クラスは、その基本クラス コンス トラクターを継承しません。

    2. オーバーライド、 Object.ToString を希望する結果の文字列を返すメソッド。

    次の例のラッパー クラスを定義する、 List<T> クラスです。 これは、上書き、 Object.ToString 完全修飾型名ではなく、コレクションの各メソッドの値を表示するメソッドです。

    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
    
  • 開発、 拡張メソッド する結果の文字列を返します。 注既定値をオーバーライドすることはできません Object.ToString この方法でメソッド (つまり、拡張機能クラス (c#) または (Visual Basic) でモジュールという名前のパラメーターのないメソッドことはできません ToString 元の型の代わりに呼び出される ToString メソッドです。 パラメーターなしの他のいくつかの名前を指定する必要があります ToString 置換します。

    次の例を拡張する 2 つのメソッドを定義する、 List<T> クラス: パラメーターなし ToString2 メソッド、および ToString メソッドを String 書式指定文字列を表すパラメーターです。

    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 }
    

呼び出すと、 ToString 内のクラスのメソッド、 Windows ランタイム, 、オーバーライドしなければクラスの既定の動作を提供して ToStringします。 これは、.NET Framework が Windows ランタイムに提供するサポートの一部です (「Windows ストア アプリおよび Windows ランタイムのための .NET Framework サポート」を参照してください)。 内のクラス、 Windows ランタイム 継承しない Object, 、常に実装していないと、 ToStringです。 ただし、常に表示されますが ToString, 、Equals(Object), 、および GetHashCode メソッド、c# または Visual Basic コードで使用すると、.NET Framework では、これらのメソッドの既定の動作です。

以降で、 .NET Framework 4.5.1, 、共通言語ランタイムを使用して IStringable.ToString 上、 Windows ランタイム オブジェクトの既定の実装に戻る前に Object.ToStringします。

System_CAPS_noteメモ

Windows ランタイム c# または Visual Basic で記述されているクラスをオーバーライドして、 ToString メソッドです。

以降で Windows 8.1, 、 Windows ランタイム を含む、 IStringable インターフェイスが 1 つのメソッド IStringable.ToString, で提供される比較可能な基本の書式設定のサポートを提供 Object.ToStringします。 あいまいさを回避するのには実装しないでください IStringable マネージ型にします。

ネイティブ コードまたは JavaScript または C++ などの言語で記述されたコードでのマネージ オブジェクトが呼び出されるタイミング/cli 実装現れる/CX では、 IStringableします。 共通言語ランタイムはからの呼び出しに自動的にルーティング IStringable.ToStringObject.ToString イベント IStringable がマネージ オブジェクトで実装されていません。

System_CAPS_warning警告

共通言語ランタイムの自動実装するため IStringable 内の型のすべての管理 Windows ストア 、アプリをお勧めことを指定しない独自 IStringable 実装します。 実装する IStringable が原因で予期しない動作を呼び出す際 ToString から、 Windows ランタイム, 、C + +/CX では、または JavaScript。

実装を選択する場合は IStringable でエクスポートしたパブリック マネージ型で、 Windows ランタイム コンポーネントでは、次の制限が適用されます。

  • 定義する、 IStringable など「クラスが実装する」関係でしかインターフェイス

    public class NewClass : IStringable
    

    C# では、上記のようになります。

    Public Class NewClass : Implements IStringable
    

    Visual Basic では、上記のようになります。

  • 実装することはできません IStringable インターフェイスです。

  • 型のパラメーターを宣言することはできません IStringableします。

  • IStringable メソッド、プロパティ、またはフィールドの戻り値の型にすることはできません。

  • 非表示にすることはできません、 IStringable 、次のようなメソッド定義を使用して、基本クラスから実装します。

    
    public class NewClass : IStringable
    {
       public new string ToString()
       {
          return "New ToString in NewClass";
       }
    }
    
    

    代わりに、 IStringable.ToString 実装は、基本クラスの実装を常にオーバーライドする必要があります。 ToString の実装を隠すことができるのは、厳密に型指定されたクラス インスタンスで呼び出す場合だけです。

なお、さまざまな条件を実装するマネージ型にネイティブ コードから呼び出す IStringable の表示と非その ToString 実装は、予期しない動作を引き起こすことができます。

継承時の注意:

オーバーライドする独自の型を実装するときに、 ToString それらの型には意味が値を返すメソッド。 も書式設定より詳細に制御を必要とするクラスを派生 ToString 提供を実装できる、 IFormattable インターフェイスです。 その IFormattable.ToString(String, IFormatProvider) メソッドを使用する書式を制御する書式指定文字列を使用して、 IFormatProvider カルチャに固有の書式設定するために提供できるオブジェクト。

オーバーライド、 ToString メソッドがこれらのガイドラインに従う必要があります。

  • 返される文字列は、わかりやすいと人間が判読する必要があります。

  • 返される文字列は、オブジェクトのインスタンスの値を一意に識別する必要があります。

  • 返される文字列は、デバッガーによって表示に適したようにできるだけ短くする必要があります。

  • ToString オーバーライドが返されないはず String.Empty または null 文字列。

  • ToString 上書きで例外をスローする必要があります。

  • インスタンスの文字列形式はカルチャに依存または複数の方法でフォーマットされていることができます、実装、 IFormattable インターフェイスです。

  • 返される文字列には、機密情報が含まれている場合は、適切なアクセス許可を最初に要求する必要があります。 要求が成功した場合は、機密情報を返すことができます。それ以外の場合、機密情報を除外する文字列を返すはずです。

  • ToString 上書きには、デバッグの複雑さを回避する副作用はありません。 呼び出しなど、 ToString メソッドは、インスタンス フィールドの値を変更しないでください。

  • 種類を解析メソッドを実装する場合 (または Parse または TryParse メソッド、コンス トラクター、または文字列から型のインスタンスをインスタンス化するいくつか他の静的メソッド)、によって返される文字列をようにする必要があります、 ToString メソッドは、オブジェクトのインスタンスに変換できます。

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: