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 继承,以实现您自己的转换要求。当从类继承时,可以重写以下方法:
若要支持自定义类型转换,请重写 CanConvertFrom、CanConvertTo、ConvertFrom 和 ConvertTo 方法。
若要转换必须重新创建对象才能更改其值的类型,请重写 CreateInstance 和 GetCreateInstanceSupported 方法。
若要转换支持属性 (Property) 的类型,请重写 GetProperties 和 GetPropertiesSupported 方法。如果转换的类没有属性 (Property),而您需要实现属性 (Property),则可以将 TypeConverter.SimplePropertyDescriptor 类用作实现属性 (Property) 说明符的基。当从 TypeConverter.SimplePropertyDescriptor 继承时,必须重写 GetValue 和 SetValue 方法。
若要转换支持标准值的类型,请重写 GetStandardValues、GetStandardValuesExclusive、GetStandardValuesSupported 和 IsValid 方法。
提示
派生类型可能会被标记为 internal 或 private,但可以使用 TypeDescriptor 类创建这种类型的实例。请不要假定调用方是受信任的而编写不安全的代码。而应假定调用方可能会在部分信任的情况下创建这种类型的实例。
有关类型转换器的更多信息,请参见 如何:实现类型转换器 或 通用类型转换。
提示
应用于此类的 HostProtectionAttribute 属性 (Attribute) 具有以下 Resources 属性 (Property) 值:SharedState。HostProtectionAttribute 不影响桌面应用程序(这些应用程序通常通过双击图标、键入命令或在浏览器中输入 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