TypeConverter 类

提供一种将值的类型转换为其他类型以及访问标准值和子属性的统一方法。

**命名空间:**System.ComponentModel
**程序集:**System(在 system.dll 中)

语法

声明
<ComVisibleAttribute(True)> _
Public Class TypeConverter
用法
Dim instance As TypeConverter
[ComVisibleAttribute(true)] 
public class TypeConverter
[ComVisibleAttribute(true)] 
public ref class TypeConverter
/** @attribute ComVisibleAttribute(true) */ 
public class TypeConverter
ComVisibleAttribute(true) 
public class TypeConverter

备注

最常用类型的转换器是进行文本表示形式转换的转换器。类的类型转换器被绑定到具有 TypeConverterAttribute 的类。除非重写该属性 (Attribute),否则从该类继承的所有类都使用与基类相同的类型转换器。

提示

决不要直接访问类型转换器。而应通过使用 TypeDescriptor 访问适当的转换器。有关更多信息,请参见所提供的代码示例。

给继承者的说明TypeConverter 继承,以实现您自己的转换要求。当从类继承时,可以重写以下方法:

提示

派生类型可能会被标记为 internalprivate,但可以使用 TypeDescriptor 类创建这种类型的实例。请不要假定调用方是受信任的而编写不安全的代码。而应假定调用方可能会在部分信任的情况下创建这种类型的实例。

有关类型转换器的更多信息,请参见 如何:实现类型转换器通用类型转换

提示

应用于此类的 HostProtectionAttribute 属性 (Attribute) 具有以下 Resources 属性 (Property) 值:SharedStateHostProtectionAttribute 不影响桌面应用程序(这些应用程序通常通过双击图标、键入命令或在浏览器中输入 URL 来启动)。有关更多信息,请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护属性

示例

下面的代码示例显示如何创建类型转换器的实例并将其绑定到类。实现转换器 (MyClassConverter) 的类必须从 TypeConverter 类继承。

<TypeConverter(GetType(MyClassConverter))> _
Public Class Class1
    ' Insert code here.
End Class 'MyClass
[TypeConverter(typeof(MyClassConverter))]
 public class MyClass {
    // Insert code here.
}
public:
   [TypeConverter(Sample::MyClassConverter::typeid)]
   ref class MyClass
   {
      // Insert code here.
   };
/** @attribute TypeConverter(MyClassConverter.class)
 */
public class MyClass
{
    // Insert code here.
} //MyClass 

当您的属性 (Property) 具有枚举时,请在设置属性 (Property) 之前检查枚举值是否有效。下一个代码示例要求已声明了名为 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
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.
    }
 }
public:
   property MyPropertyEnum MyProperty 
   {
      void set( MyPropertyEnum value )
      {
         // Checks to see if the value passed is valid.
         if ( !TypeDescriptor::GetConverter( MyPropertyEnum::typeid )->IsValid( value ) )
         {
            throw gcnew ArgumentException;
         }
         // The value is valid. Insert code to set the property.
      }
   }
/** @property 
 */
public void set_MyProperty(MyPropertyEnum value)
{
    // Checks to see if the value passed is valid.
    if (!(TypeDescriptor.GetConverter(MyPropertyEnum.class.ToType()).
        IsValid(value))) {
        throw new ArgumentException();
    }
    // The value is valid. Insert code to set the property.
} //set_MyProperty

另一个常用的类型转换器用法是将对象转换为字符串。下面的代码示例输出存储在变量 c 中的 Color 的名称。

Dim c As Color = Color.Red
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c))
Color c = Color.Red;
    Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c));
Color c = Color::Red;
Console::WriteLine( TypeDescriptor::GetConverter( c )->ConvertToString( c ) );
Color c = Color.get_Red();
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c));

还可以使用类型转换器从值的名称转换值,如下一个代码示例所示。

Dim c As Color = CType(TypeDescriptor.GetConverter(GetType(Color)).ConvertFromString("Red"), Color)
Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
Color c =  (Color)(TypeDescriptor::GetConverter( Color::typeid )->ConvertFromString( "Red" ));
Color c = (Color)(TypeDescriptor.GetConverter(Color.class.ToType()).
    ConvertFromString("Red"));

在下面的代码示例中,您可以使用类型转换器来输出对象所支持的标准值集。

Dim c As Color
For Each c In  TypeDescriptor.GetConverter(GetType(Color)).GetStandardValues()
    Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c))
Next c
foreach(Color c in TypeDescriptor.GetConverter(typeof(Color)).GetStandardValues()) {
    Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c));
 }
for each ( Color c in TypeDescriptor::GetConverter( Color::typeid )->GetStandardValues() )
{
   Console::WriteLine( TypeDescriptor::GetConverter( c )->ConvertToString( c ) );
}
IEnumerator e = TypeDescriptor.GetConverter(Color.class.ToType()).
    GetStandardValues().GetEnumerator();
while (e.MoveNext()) {
    Color c = (Color)e.get_Current();
    Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c));
}

继承层次结构

System.Object
  System.ComponentModel.TypeConverter
     派生类

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

TypeConverter 成员
System.ComponentModel 命名空间
TypeConverterAttribute
PropertyDescriptorCollection 类
TypeConverter.SimplePropertyDescriptor
TypeConverter.StandardValuesCollection