TypeConverter Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece uma maneira unificada de converter tipos de valores em outros tipos, bem como para acessar valores padrão e subpropriedades.
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
- Herança
-
TypeConverter
- Derivado
- Atributos
Exemplos
O exemplo de código a seguir mostra como criar uma instância de um conversor de tipo e associá-la a uma classe. A classe que implementa o conversor, MyClassConverter
, deve herdar da classe 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
Quando você tiver uma propriedade que tenha uma enumeração, verifique se um valor de enumeração é válido antes de definir a propriedade. O próximo exemplo de código requer que uma enumeração chamada MyPropertyEnum
tenha sido declarada.
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
Outro uso comum do conversor de tipo é converter um objeto em uma cadeia de caracteres. O exemplo de código a seguir imprime o nome do Color armazenado na variável 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))
Você também pode usar um conversor de tipo para converter um valor de seu nome, conforme mostrado no próximo exemplo de código.
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)
No exemplo de código a seguir, você pode usar um conversor de tipo para imprimir o conjunto de valores padrão aos quais o objeto dá suporte.
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
Comentários
O tipo mais comum de conversor é aquele que converte de e para uma representação de texto. O conversor de tipo de uma classe está associado à classe com um TypeConverterAttribute. A menos que esse atributo seja substituído, todas as classes que herdam dessa classe usam o mesmo conversor de tipo que a classe base.
Nota
Para fins gerais do sistema de tipos, não acesse diretamente um conversor de tipo. Em vez disso, acesse o conversor apropriado usando TypeDescriptor. Para obter mais informações, consulte os exemplos de código fornecidos.
No entanto, ao usar XAML, um processador XAML pesquisa o TypeConverterAttribute diretamente, em vez de passar por TypeDescriptor. Para casos em que você deseja uma instância TypeDescriptor do código ou onde você cria uma instância compartilhada em recursos do WPF, é aceitável construí-la diretamente sem referenciar TypeDescriptor ou outro suporte do sistema de reflexão e tipo.
Classes derivadas de TypeConverter geralmente são referenciadas como parte de como um processador XAML converte um valor de texto de atributo ou inicialização de marcação (que é inerentemente uma cadeia de caracteres) e gera um objeto para uma representação em tempo de execução. Autores de tipo personalizado que pretendem dar suporte a um comportamento de conversão de tipo para XAML normalmente implementam uma classe TypeConverter que dá suporte a seu próprio comportamento de ConvertFrom
exclusivo de uma cadeia de caracteres. Esse comportamento permite a conversão de tipo da cadeia de caracteres fornecida como um valor de atributo XAML e fornece um processador XAML com o suporte necessário para criar um objeto a partir da cadeia de caracteres, para que o objeto possa ser produzido em um grafo de objeto analisado. Tipos personalizados ou membros de tipos personalizados são indicados aplicando TypeConverterAttribute às definições, com o atributo fazendo referência à implementação de TypeConverter personalizada. Para obter mais informações, consulte Type Converters for XAML Overview.
Notas aos Herdeiros
Herda de TypeConverter para implementar seus próprios requisitos de conversão. Ao herdar dessa classe, você pode substituir os seguintes métodos:
Para dar suporte à conversão de tipo personalizado, substitua os métodos CanConvertFrom(ITypeDescriptorContext, Type), CanConvertTo(ITypeDescriptorContext, Type), ConvertFrom(ITypeDescriptorContext, CultureInfo, Object)e ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type).
Para converter tipos que devem recriar o objeto para alterar seu valor, substitua os métodos CreateInstance(ITypeDescriptorContext, IDictionary) e GetCreateInstanceSupported(ITypeDescriptorContext).
Para converter tipos que dão suporte a propriedades, substitua os métodos GetProperties(ITypeDescriptorContext, Object, Attribute[]) e GetPropertiesSupported(ITypeDescriptorContext). Se a classe que você está convertendo não tiver propriedades e precisar implementar propriedades, você poderá usar a classe TypeConverter.SimplePropertyDescriptor como base para implementar os descritores de propriedade. Quando você herda de TypeConverter.SimplePropertyDescriptor, deve substituir os métodos GetValue(Object) e SetValue(Object, Object).
Para converter tipos que dão suporte a valores padrão, substitua os métodos GetStandardValues(ITypeDescriptorContext), GetStandardValuesExclusive(ITypeDescriptorContext), GetStandardValuesSupported(ITypeDescriptorContext) e IsValid(ITypeDescriptorContext, Object).
Observação: seu tipo derivado pode ser marcado como internal
ou private
, mas uma instância do seu tipo pode ser criada com a classe TypeDescriptor. Não escreva código inseguro supondo que o chamador seja confiável. Suponha, em vez disso, que os chamadores possam criar instâncias do seu tipo em confiança parcial.
Para obter mais informações sobre conversores de tipo para fins gerais (não XAML), consulte How to: Implement a Type Converter or Generalized Type Conversion.
Construtores
TypeConverter() |
Inicializa uma nova instância da classe TypeConverter. |
Métodos
CanConvertFrom(ITypeDescriptorContext, Type) |
Retorna se esse conversor pode converter um objeto do tipo fornecido para o tipo desse conversor usando o contexto especificado. |
CanConvertFrom(Type) |
Retorna se esse conversor pode converter um objeto do tipo fornecido no tipo desse conversor. |
CanConvertTo(ITypeDescriptorContext, Type) |
Retorna se esse conversor pode converter o objeto no tipo especificado, usando o contexto especificado. |
CanConvertTo(Type) |
Retorna se esse conversor pode converter o objeto no tipo especificado. |
ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) |
Converte o objeto fornecido no tipo desse conversor, usando as informações de contexto e cultura especificadas. |
ConvertFrom(Object) |
Converte o valor fornecido no tipo desse conversor. |
ConvertFromInvariantString(ITypeDescriptorContext, String) |
Converte a cadeia de caracteres fornecida no tipo desse conversor, usando a cultura invariável e o contexto especificado. |
ConvertFromInvariantString(String) |
Converte a cadeia de caracteres fornecida no tipo desse conversor, usando a cultura invariável. |
ConvertFromString(ITypeDescriptorContext, CultureInfo, String) |
Converte o texto fornecido em um objeto, usando as informações de contexto e cultura especificadas. |
ConvertFromString(ITypeDescriptorContext, String) |
Converte o texto fornecido em um objeto usando o contexto especificado. |
ConvertFromString(String) |
Converte o texto especificado em um objeto. |
ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type) |
Converte o objeto de valor fornecido no tipo especificado, usando as informações de contexto e cultura especificadas. |
ConvertTo(Object, Type) |
Converte o objeto de valor fornecido no tipo especificado, usando os argumentos. |
ConvertToInvariantString(ITypeDescriptorContext, Object) |
Converte o valor especificado em uma representação de cadeia de caracteres invariável de cultura usando o contexto especificado. |
ConvertToInvariantString(Object) |
Converte o valor especificado em uma representação de cadeia de caracteres invariável por cultura. |
ConvertToString(ITypeDescriptorContext, CultureInfo, Object) |
Converte o valor fornecido em uma representação de cadeia de caracteres usando as informações de contexto e cultura especificadas. |
ConvertToString(ITypeDescriptorContext, Object) |
Converte o valor fornecido em uma representação de cadeia de caracteres usando o contexto fornecido. |
ConvertToString(Object) |
Converte o valor especificado em uma representação de cadeia de caracteres. |
CreateInstance(IDictionary) |
Recria um Object dado um conjunto de valores de propriedade para o objeto. |
CreateInstance(ITypeDescriptorContext, IDictionary) |
Cria uma instância do tipo ao qual esse TypeConverter está associado, usando o contexto especificado, dado um conjunto de valores de propriedade para o objeto. |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetConvertFromException(Object) |
Retorna uma exceção a ser gerada quando uma conversão não pode ser executada. |
GetConvertToException(Object, Type) |
Retorna uma exceção a ser gerada quando uma conversão não pode ser executada. |
GetCreateInstanceSupported() |
Retorna se alterar um valor nesse objeto requer uma chamada para o método CreateInstance(IDictionary) para criar um novo valor. |
GetCreateInstanceSupported(ITypeDescriptorContext) |
Retorna se alterar um valor nesse objeto requer uma chamada para CreateInstance(IDictionary) para criar um novo valor, usando o contexto especificado. |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetProperties(ITypeDescriptorContext, Object, Attribute[]) |
Retorna uma coleção de propriedades para o tipo de matriz especificado pelo parâmetro de valor, usando o contexto e os atributos especificados. |
GetProperties(ITypeDescriptorContext, Object) |
Retorna uma coleção de propriedades para o tipo de matriz especificado pelo parâmetro de valor, usando o contexto especificado. |
GetProperties(Object) |
Retorna uma coleção de propriedades para o tipo de matriz especificado pelo parâmetro de valor. |
GetPropertiesSupported() |
Retorna se esse objeto dá suporte a propriedades. |
GetPropertiesSupported(ITypeDescriptorContext) |
Retorna se esse objeto dá suporte a propriedades, usando o contexto especificado. |
GetStandardValues() |
Retorna uma coleção de valores padrão do contexto padrão para o tipo de dados para o qual esse conversor de tipo foi projetado. |
GetStandardValues(ITypeDescriptorContext) |
Retorna uma coleção de valores padrão para o tipo de dados para o qual esse conversor de tipo foi projetado quando fornecido com um contexto de formato. |
GetStandardValuesExclusive() |
Retorna se a coleção de valores padrão retornados de GetStandardValues() é uma lista exclusiva. |
GetStandardValuesExclusive(ITypeDescriptorContext) |
Retorna se a coleção de valores padrão retornados de GetStandardValues() é uma lista exclusiva de valores possíveis, usando o contexto especificado. |
GetStandardValuesSupported() |
Retorna se esse objeto dá suporte a um conjunto padrão de valores que podem ser escolhidos em uma lista. |
GetStandardValuesSupported(ITypeDescriptorContext) |
Retorna se esse objeto dá suporte a um conjunto padrão de valores que podem ser escolhidos em uma lista, usando o contexto especificado. |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
IsValid(ITypeDescriptorContext, Object) |
Retorna se o objeto de valor fornecido é válido para esse tipo e para o contexto especificado. |
IsValid(Object) |
Retorna se o objeto de valor fornecido é válido para esse tipo. |
MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
SortProperties(PropertyDescriptorCollection, String[]) |
Classifica uma coleção de propriedades. |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Aplica-se a
Confira também
- TypeConverterAttribute
- PropertyDescriptorCollection
- TypeConverter.SimplePropertyDescriptor
- TypeConverter.StandardValuesCollection
- visão geral de conversores de tipo para XAML
- atributos CLR relacionados a XAML para tipos e bibliotecas personalizados
- Definir tipos personalizados para uso com os Serviços XAML do .NET
- documentação conceitual do NET XAML Services