TypeConverter クラス
値の型を他の型に変換し、標準値とサブプロパティにアクセスするための統一的な方法を提供します。
この型のすべてのメンバの一覧については、TypeConverter メンバ を参照してください。
System.Object
System.ComponentModel.TypeConverter
派生クラス
<ComVisible(True)>
Public Class TypeConverter
[C#]
[ComVisible(true)]
public class TypeConverter
[C++]
[ComVisible(true)]
public __gc class TypeConverter
[JScript]
public
ComVisible(true)
class TypeConverter
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
最も一般的な型コンバータは、テキスト形式への変換と、その逆の変換を行います。クラスの型コンバータは、 TypeConverterAttribute を使用してそのクラスに関連付けられます。この属性がオーバーライドされない限り、このクラスから継承されるすべてのクラスは、基本クラスと同じ型コンバータを使用します。
メモ 型コンバータには直接アクセスしないでください。代わりに、 TypeDescriptor を使用して、該当するコンバータにアクセスします。詳細については、コード例を参照してください。
継承時の注意: 独自の変換要件を実装するには、 TypeConverter から継承します。このクラスから継承する場合は、次のメソッドをオーバーライドできます。
- カスタムの型変換をサポートするには、 CanConvertFrom 、 CanConvertTo 、 ConvertFrom 、 ConvertTo の各メソッドをオーバーライドします。
- 値を変更するためにオブジェクトを再作成する必要がある型を変換するには、 CreateInstance と GetCreateInstanceSupported をオーバーライドします。
- プロパティをサポートする型を変換するには、 GetProperties と GetPropertiesSupported をオーバーライドします。変換対象のクラスにプロパティがない場合に、プロパティを実装する必要があるときは、プロパティ記述子を実装するための基本クラスとして TypeConverter.SimplePropertyDescriptor クラスを使用できます。 TypeConverter.SimplePropertyDescriptor から継承する場合は、 GetValue メソッドと SetValue メソッドをオーバーライドする必要があります。
- 標準値をサポートする型を変換するには、 GetStandardValues 、 GetStandardValuesExclusive 、 GetStandardValuesSupported 、 IsValid の各メソッドをオーバーライドします。
型コンバータの詳細については、 型コンバータの実装 または 一般的な型変換 のトピックを参照してください。
使用例
[Visual Basic, C#, C++] 型コンバータのインスタンスを作成し、そのインスタンスをクラスに関連付ける方法を次に示します。型コンバータ MyClassConverter
を実装するクラスは、 TypeConverter クラスから継承する必要があります。
<TypeConverter(GetType(MyClassConverter))> _
Public Class Class1
' Insert code here.
End Class 'MyClass
[C#]
[TypeConverter(typeof(MyClassConverter))]
public class MyClass {
// Insert code here.
}
[C++]
public:
[TypeConverter(__typeof(Sample::MyClassConverter))]
__gc class MyClass {
// Insert code here.
};
[Visual Basic, C#, C++] 列挙型のプロパティがある場合は、プロパティを設定する前に列挙値が有効かどうかを確認します。次のコード例は、 MyPropertyEnum
という名前の列挙体が宣言されていることを前提にしています。
Public WriteOnly Property MyProperty() As MyPropertyEnum
Set
' Checks to see if the value passed is valid.
If Not TypeDescriptor.GetConverter(GetType(MyPropertyEnum)).IsValid(value) Then
Throw New ArgumentException()
End If
' The value is valid. Insert code to set the property.
End Set
End Property
[C#]
public MyPropertyEnum MyProperty {
set {
// Checks to see if the value passed is valid.
if (!TypeDescriptor.GetConverter(typeof(MyPropertyEnum)).IsValid(value)) {
throw new ArgumentException();
}
// The value is valid. Insert code to set the property.
}
}
[C++]
public:
__property void set_MyProperty( MyPropertyEnum value ) {
// Checks to see if the value passed is valid.
if (!TypeDescriptor::GetConverter(__typeof(MyPropertyEnum))->IsValid(__box(value))) {
throw new ArgumentException();
}
// The value is valid. Insert code to set the property.
}
[Visual Basic, C#, C++] 型コンバータは、オブジェクトから文字列への変換にも一般的に使用されます。変数 c
に格納されている Color の名前を出力する例を次に示します。
Dim c As Color = Color.Red
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c))
[C#]
Color c = Color.Red;
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c));
[C++]
Color c = Color::Red;
Console::WriteLine(TypeDescriptor::GetConverter( __box(c))->ConvertToString(__box(c)));
[Visual Basic, C#, C++] また、次のコード例に示すように、名前から値への変換にも型コンバータを使用できます。
Dim c As Color = CType(TypeDescriptor.GetConverter(GetType(Color)).ConvertFromString("Red"), Color)
[C#]
Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
[C++]
Color c = *dynamic_cast<__box Color*>(TypeDescriptor::GetConverter(__typeof(Color))->ConvertFromString(S"Red"));
[Visual Basic, C#, C++] この例では、型コンバータを使用して、オブジェクトがサポートする一連の標準値も出力できます。
Dim c As Color
For Each c In TypeDescriptor.GetConverter(GetType(Color)).GetStandardValues()
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c))
Next c
[C#]
foreach(Color c in TypeDescriptor.GetConverter(typeof(Color)).GetStandardValues()) {
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c));
}
[C++]
System::Collections::IEnumerator* myEnum = TypeDescriptor::GetConverter(__typeof(Color))->GetStandardValues()->GetEnumerator();
while (myEnum->MoveNext())
{
Color c = *__try_cast<__box Color*>(myEnum->Current);
Console::WriteLine(TypeDescriptor::GetConverter( __box(c))->ConvertToString(__box(c)));
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.ComponentModel
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
アセンブリ: System (System.dll 内)
参照
TypeConverter メンバ | System.ComponentModel 名前空間 | TypeConverterAttribute | PropertyDescriptorCollection | TypeConverter.SimplePropertyDescriptor | TypeConverter.StandardValuesCollection