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
另一种常见的类型转换器用法是将对象转换为字符串。 下面的代码示例输出变量 中存储的 Color 的名称 c
。
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 的类型转换行为的自定义类型作者通常实现一个 TypeConverter 类,该类支持自己通过字符串的独特 ConvertFrom
行为。 此行为允许从作为 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 类的新实例。 |