TypeConverter Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zapewnia ujednolicony sposób konwertowania typów wartości na inne typy, a także uzyskiwanie dostępu do wartości standardowych i podwłaściwości.
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
- Dziedziczenie
-
TypeConverter
- Pochodne
- Atrybuty
Przykłady
W poniższym przykładzie kodu pokazano, jak utworzyć wystąpienie konwertera typów i powiązać je z klasą. Klasa implementowania konwertera , MyClassConverter
musi dziedziczyć z TypeConverter klasy .
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
Jeśli masz właściwość zawierającą wyliczenie, przed ustawieniem właściwości sprawdź, czy wartość wyliczenia jest prawidłowa. Następny przykład kodu wymaga zadeklarowania wyliczenia o nazwie 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
Innym typowym użyciem konwertera typów jest przekonwertowanie obiektu na ciąg. Poniższy przykład kodu wyświetla nazwę przechowywanego Color w zmiennej 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))
Możesz również użyć konwertera typów, aby przekonwertować wartość z jego nazwy, jak pokazano w następnym przykładzie kodu.
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)
W poniższym przykładzie kodu można użyć konwertera typów, aby wyświetlić zestaw wartości standardowych, które obsługuje obiekt.
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
Uwagi
Najbardziej typowym typem konwertera jest ten, który konwertuje na i z reprezentacji tekstowej. Konwerter typów dla klasy jest powiązany z klasą za pomocą klasy TypeConverterAttribute. Jeśli ten atrybut nie zostanie zastąpiony, wszystkie klasy dziedziczone z tej klasy używają tego samego konwertera typów co klasa bazowa.
Uwaga
Do celów systemowych typu ogólnego nie należy uzyskiwać bezpośredniego dostępu do konwertera typów. Zamiast tego uzyskaj dostęp do odpowiedniego konwertera przy użyciu polecenia TypeDescriptor. Aby uzyskać więcej informacji, zobacz podane przykłady kodu.
Jednak w przypadku korzystania z języka XAML procesor XAML wyszukuje dane bezpośrednio, zamiast przechodzić przez TypeDescriptormetodę TypeConverterAttribute . W przypadku, gdy potrzebujesz TypeDescriptor wystąpienia z kodu lub gdy tworzysz wystąpienie udostępnione w zasobach WPF, dopuszczalne jest utworzenie go bezpośrednio bez odwoływania TypeDescriptor się do innych odbicia i obsługi systemu typów.
Klasy pochodzące z TypeConverter klasy są często przywoływały jako część sposobu konwertowania atrybutu lub wartości tekstowej inicjowania z znaczników (co jest z natury ciągiem) i generuje obiekt dla reprezentacji w czasie wykonywania. Autorzy typów niestandardowych, którzy zamierzają obsługiwać zachowanie konwersji typów dla języka XAML, zazwyczaj implementują klasę TypeConverter , która obsługuje własne unikatowe ConvertFrom
zachowanie z ciągu. To zachowanie umożliwia konwersję typu z ciągu podanego jako wartość atrybutu XAML i zapewnia procesor XAML z obsługą potrzebną do utworzenia obiektu na podstawie ciągu, dzięki czemu obiekt można wygenerować na grafie analizowanego obiektu. Niestandardowe typy lub elementy członkowskie typów niestandardowych są wskazywane przez zastosowanie TypeConverterAttribute do definicji z atrybutem odwołującym się do implementacji niestandardowej TypeConverter . Aby uzyskać więcej informacji, zobacz Konwertery typów dla języka XAML — omówienie.
Uwagi dotyczące dziedziczenia
Dziedzicz z TypeConverter , aby zaimplementować własne wymagania dotyczące konwersji. Po dziedziczeniu z tej klasy można zastąpić następujące metody:
Aby obsługiwać konwersję typów niestandardowych, zastąpij CanConvertFrom(ITypeDescriptorContext, Type)metody , CanConvertTo(ITypeDescriptorContext, Type), ConvertFrom(ITypeDescriptorContext, CultureInfo, Object)i ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type) .
Aby przekonwertować typy, które muszą ponownie utworzyć obiekt, aby zmienić jego wartość, przesłoń CreateInstance(ITypeDescriptorContext, IDictionary) metody i GetCreateInstanceSupported(ITypeDescriptorContext) .
Aby przekonwertować typy obsługujące właściwości, zastąpij GetProperties(ITypeDescriptorContext, Object, Attribute[]) metody i GetPropertiesSupported(ITypeDescriptorContext) . Jeśli konwertowana klasa nie ma właściwości i musisz zaimplementować właściwości, możesz użyć TypeConverter.SimplePropertyDescriptor klasy jako podstawy do implementowania deskryptorów właściwości. Gdy dziedziczysz z TypeConverter.SimplePropertyDescriptorklasy , należy zastąpić GetValue(Object) metody i SetValue(Object, Object) .
Aby przekonwertować typy obsługujące standardowe wartości, zastąpij GetStandardValues(ITypeDescriptorContext)metody , GetStandardValuesExclusive(ITypeDescriptorContext)GetStandardValuesSupported(ITypeDescriptorContext) i IsValid(ITypeDescriptorContext, Object) .
Uwaga: Typ pochodny może być oznaczony jako internal
lub private
, ale wystąpienie typu można utworzyć za TypeDescriptor pomocą klasy . Nie zapisuj niezabezpieczonego kodu, zakładając, że obiekt wywołujący jest zaufany. Załóżmy, że obiekty wywołujące mogą tworzyć wystąpienia typu w częściowym zaufaniu.
Aby uzyskać więcej informacji na temat konwerterów typów dla ogólnych celów (innych niż XAML), zobacz How to: Implement a Type Converter or Generalized Type Conversion (Instrukcje: implementowanie konwertera typów lub uogólnionej konwersji typów).
Konstruktory
TypeConverter() |
Inicjuje nowe wystąpienie klasy TypeConverter. |
Metody
CanConvertFrom(ITypeDescriptorContext, Type) |
Zwraca, czy ten konwerter może przekonwertować obiekt danego typu na typ tego konwertera przy użyciu określonego kontekstu. |
CanConvertFrom(Type) |
Zwraca, czy ten konwerter może przekonwertować obiekt danego typu na typ tego konwertera. |
CanConvertTo(ITypeDescriptorContext, Type) |
Zwraca, czy ten konwerter może przekonwertować obiekt na określony typ przy użyciu określonego kontekstu. |
CanConvertTo(Type) |
Zwraca, czy ten konwerter może przekonwertować obiekt na określony typ. |
ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) |
Konwertuje dany obiekt na typ tego konwertera przy użyciu określonego kontekstu i informacji o kulturze. |
ConvertFrom(Object) |
Konwertuje daną wartość na typ tego konwertera. |
ConvertFromInvariantString(ITypeDescriptorContext, String) |
Konwertuje dany ciąg na typ tego konwertera przy użyciu niezmiennej kultury i określonego kontekstu. |
ConvertFromInvariantString(String) |
Konwertuje dany ciąg na typ tego konwertera przy użyciu niezmiennej kultury. |
ConvertFromString(ITypeDescriptorContext, CultureInfo, String) |
Konwertuje dany tekst na obiekt przy użyciu określonego kontekstu i informacji o kulturze. |
ConvertFromString(ITypeDescriptorContext, String) |
Konwertuje dany tekst na obiekt przy użyciu określonego kontekstu. |
ConvertFromString(String) |
Konwertuje określony tekst na obiekt. |
ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type) |
Konwertuje dany obiekt wartości na określony typ przy użyciu określonych kontekstów i informacji o kulturze. |
ConvertTo(Object, Type) |
Konwertuje podany obiekt wartości na określony typ przy użyciu argumentów. |
ConvertToInvariantString(ITypeDescriptorContext, Object) |
Konwertuje określoną wartość na reprezentację ciągu niezmiennego kultury przy użyciu określonego kontekstu. |
ConvertToInvariantString(Object) |
Konwertuje określoną wartość na niezmienną reprezentację ciągu kultury. |
ConvertToString(ITypeDescriptorContext, CultureInfo, Object) |
Konwertuje daną wartość na reprezentację ciągu przy użyciu określonego kontekstu i informacji o kulturze. |
ConvertToString(ITypeDescriptorContext, Object) |
Konwertuje daną wartość na reprezentację ciągu przy użyciu danego kontekstu. |
ConvertToString(Object) |
Konwertuje określoną wartość na reprezentację ciągu. |
CreateInstance(IDictionary) |
Ponownie tworzy Object dany zestaw wartości właściwości dla obiektu. |
CreateInstance(ITypeDescriptorContext, IDictionary) |
Tworzy wystąpienie typu skojarzonego TypeConverter z określonym kontekstem przy użyciu określonego kontekstu, biorąc pod uwagę zestaw wartości właściwości dla obiektu. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetConvertFromException(Object) |
Zwraca wyjątek zgłaszany, gdy nie można wykonać konwersji. |
GetConvertToException(Object, Type) |
Zwraca wyjątek zgłaszany, gdy nie można wykonać konwersji. |
GetCreateInstanceSupported() |
Zwraca, czy zmiana wartości w tym obiekcie wymaga wywołania metody w CreateInstance(IDictionary) celu utworzenia nowej wartości. |
GetCreateInstanceSupported(ITypeDescriptorContext) |
Zwraca, czy zmiana wartości na tym obiekcie wymaga wywołania w celu CreateInstance(IDictionary) utworzenia nowej wartości przy użyciu określonego kontekstu. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetProperties(ITypeDescriptorContext, Object) |
Zwraca kolekcję właściwości dla typu tablicy określonej przez parametr value przy użyciu określonego kontekstu. |
GetProperties(ITypeDescriptorContext, Object, Attribute[]) |
Zwraca kolekcję właściwości dla typu tablicy określonej przez parametr value przy użyciu określonego kontekstu i atrybutów. |
GetProperties(Object) |
Zwraca kolekcję właściwości dla typu tablicy określonej przez parametr value. |
GetPropertiesSupported() |
Zwraca, czy ten obiekt obsługuje właściwości. |
GetPropertiesSupported(ITypeDescriptorContext) |
Zwraca, czy ten obiekt obsługuje właściwości przy użyciu określonego kontekstu. |
GetStandardValues() |
Zwraca kolekcję wartości standardowych z kontekstu domyślnego dla typu danych, dla których jest przeznaczony ten konwerter typów. |
GetStandardValues(ITypeDescriptorContext) |
Zwraca kolekcję wartości standardowych dla typu danych, dla których ten konwerter typów jest przeznaczony w przypadku, gdy jest dostarczany z kontekstem formatu. |
GetStandardValuesExclusive() |
Zwraca, czy kolekcja wartości standardowych zwracanych z GetStandardValues() listy jest wyłączną listą. |
GetStandardValuesExclusive(ITypeDescriptorContext) |
Zwraca, czy kolekcja wartości standardowych zwracanych z GetStandardValues() jest wyłączną listą możliwych wartości przy użyciu określonego kontekstu. |
GetStandardValuesSupported() |
Zwraca, czy ten obiekt obsługuje standardowy zestaw wartości, które można wybrać z listy. |
GetStandardValuesSupported(ITypeDescriptorContext) |
Zwraca, czy ten obiekt obsługuje standardowy zestaw wartości, które można wybrać z listy przy użyciu określonego kontekstu. |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
IsValid(ITypeDescriptorContext, Object) |
Zwraca, czy dany obiekt wartości jest prawidłowy dla tego typu i dla określonego kontekstu. |
IsValid(Object) |
Zwraca, czy dany obiekt wartości jest prawidłowy dla tego typu. |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
SortProperties(PropertyDescriptorCollection, String[]) |
Sortuje kolekcję właściwości. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Dotyczy
Zobacz też
- TypeConverterAttribute
- PropertyDescriptorCollection
- TypeConverter.SimplePropertyDescriptor
- TypeConverter.StandardValuesCollection
- Omówienie konwerterów typów dla języka XAML
- Atrybuty CLR związane z językiem XAML dla typów niestandardowych i bibliotek
- Definiowanie typów niestandardowych do użycia z usługami XAML platformy .NET
- Dokumentacja koncepcyjna usług XAML platformy NET