TypeConverter 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供将值类型转换为其他类型的统一方法,以及访问标准值和子属性。
public ref class TypeConverter
public class TypeConverter
[System.Runtime.InteropServices.ComVisible(true)]
public class TypeConverter
type TypeConverter = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type TypeConverter = class
Public Class TypeConverter
- 继承
-
TypeConverter
- 派生
- 属性
示例
下面的代码示例演示如何创建类型转换器的实例并将其绑定到类。 实现转换器的类(MyClassConverter
)必须继承自 TypeConverter 类。
public:
[TypeConverter(Sample::MyClassConverter::typeid)]
ref class MyClass
{
// Insert code here.
};
[TypeConverter(typeof(MyClassConverter))]
public class MyClass {
// Insert code here.
}
<TypeConverter(GetType(MyClassConverter))> _
Public Class Class1
' Insert code here.
End Class
如果属性具有枚举,请检查枚举值在设置属性之前是否有效。 下一个代码示例要求声明名为 MyPropertyEnum
的枚举。
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.
}
}
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 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
中的 Color 的名称。
Color c = Color::Red;
Console::WriteLine( TypeDescriptor::GetConverter( c )->ConvertToString( c ) );
Color c = Color.Red;
Console.WriteLine(TypeDescriptor.GetConverter(typeof(Color)).ConvertToString(c));
Dim c As Color = Color.Red
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c))
还可以使用类型转换器从其名称转换值,如下一个代码示例所示。
Color c = (Color)(TypeDescriptor::GetConverter( Color::typeid )->ConvertFromString( "Red" ));
Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
Dim c As Color = CType(TypeDescriptor.GetConverter(GetType(Color)).ConvertFromString("Red"), Color)
在下面的代码示例中,可以使用类型转换器输出对象支持的标准值集。
for each ( Color c in TypeDescriptor::GetConverter( Color::typeid )->GetStandardValues() )
{
Console::WriteLine( TypeDescriptor::GetConverter( c )->ConvertToString( c ) );
}
foreach(Color c in TypeDescriptor.GetConverter(typeof(Color)).GetStandardValues()) {
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c));
}
Dim c As Color
For Each c In TypeDescriptor.GetConverter(GetType(Color)).GetStandardValues()
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c))
Next c
注解
最常见的转换器类型是与文本表示形式相互转换的转换器。 类的类型转换器绑定到具有 TypeConverterAttribute的类。 除非重写此属性,否则继承自此类的所有类都使用与基类相同的类型转换器。
注意
出于常规类型系统目的,请勿直接访问类型转换器。 请改用 TypeDescriptor访问相应的转换器。 有关详细信息,请参阅提供的代码示例。
但是,使用 XAML 时,XAML 处理器直接搜索 TypeConverterAttribute,而不是通过 TypeDescriptor。 如果确实需要代码中的 TypeDescriptor 实例,或者在 WPF 资源中创建共享实例,则可以直接构造它,而无需引用 TypeDescriptor 或其他反射和类型系统支持。
从 TypeConverter 派生的类通常作为 XAML 处理器如何转换标记的属性或初始化文本值的一部分(这本质上是字符串),并为运行时表示形式生成对象。 用于支持 XAML 类型转换行为的自定义类型作者通常实现一个支持字符串中自己唯一 ConvertFrom
行为的 TypeConverter 类。 此行为允许从作为 XAML 属性值提供的字符串进行类型转换,并为 XAML 处理器提供从字符串创建对象所需的支持,以便可以在分析的对象图中生成对象。 自定义类型或自定义类型的成员通过向定义应用 TypeConverterAttribute 来指示,属性引用自定义 TypeConverter 实现。 有关详细信息,请参阅 XAML 类型转换器概述。
继承者说明
继承自 TypeConverter 以实现自己的转换要求。 从此类继承时,可以重写以下方法:
若要支持自定义类型转换,请重写 CanConvertFrom(ITypeDescriptorContext, Type)、CanConvertTo(ITypeDescriptorContext, Type)、ConvertFrom(ITypeDescriptorContext, CultureInfo, Object)和 ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type) 方法。
若要转换必须重新创建对象以更改其值的类型,请重写 CreateInstance(ITypeDescriptorContext, IDictionary) 和 GetCreateInstanceSupported(ITypeDescriptorContext) 方法。
若要转换支持属性的类型,请重写 GetProperties(ITypeDescriptorContext, Object, Attribute[]) 和 GetPropertiesSupported(ITypeDescriptorContext) 方法。 如果要转换的类没有属性,并且需要实现属性,则可以将 TypeConverter.SimplePropertyDescriptor 类用作实现属性描述符的基类。 从 TypeConverter.SimplePropertyDescriptor继承时,必须重写 GetValue(Object) 和 SetValue(Object, Object) 方法。
若要转换支持标准值的类型,请重写 GetStandardValues(ITypeDescriptorContext)、GetStandardValuesExclusive(ITypeDescriptorContext)、GetStandardValuesSupported(ITypeDescriptorContext) 和 IsValid(ITypeDescriptorContext, Object) 方法。
注意:派生类型可能标记为 internal
或 private
,但可以使用 TypeDescriptor 类创建类型的实例。 假设调用方受信任,请不要编写不安全的代码。 假设调用方可能会在部分信任中创建类型的实例。
有关常规类型转换器(非 XAML)用途的详细信息,请参阅 如何:实现类型转换器 或 通用类型转换。
构造函数
TypeConverter() |
初始化 TypeConverter 类的新实例。 |