TypeConverter Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет унифицированный способ преобразования типов значений в другие типы, а также позволяет осуществить доступ к стандартным значениям и вложенным свойствам.
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. |
Методы
CanConvertFrom(ITypeDescriptorContext, Type) |
Возвращает значение, указывающее, может ли этот преобразователь выполнить преобразование объекта заданного типа в тип этого преобразователя, используя заданный контекст. |
CanConvertFrom(Type) |
Возвращает значение, указывающее, может ли этот преобразователь преобразовать объект заданного типа к типу этого преобразователя. |
CanConvertTo(ITypeDescriptorContext, Type) |
Возвращает значение, показывающее, может ли этот преобразователь преобразовать объект в заданный тип с помощью указанного контекста. |
CanConvertTo(Type) |
Возвращает значение, указывающее, может ли этот преобразователь выполнить преобразование данного объекта к заданному типу. |
ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) |
Преобразует заданный объект в тип данного преобразователя с использованием указанного контекста и сведений о культуре. |
ConvertFrom(Object) |
Приводит заданное значение к типу этого преобразователя. |
ConvertFromInvariantString(ITypeDescriptorContext, String) |
Преобразует заданную строку к типу этого преобразователя, используя нейтральные язык и региональные параметры вместе с заданным контекстом. |
ConvertFromInvariantString(String) |
Преобразует заданную строку к типу этого преобразователя, используя нейтральные язык и региональные параметры. |
ConvertFromString(ITypeDescriptorContext, CultureInfo, String) |
Преобразует заданный текст в объект, используя заданный контекст и сведения о языке и региональных параметрах. |
ConvertFromString(ITypeDescriptorContext, String) |
Преобразует заданный текст в объект, используя заданный контекст. |
ConvertFromString(String) |
Преобразует заданный текст в объект. |
ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type) |
Преобразует заданный объект значения в указанный тип с использованием указанного контекста и сведений о культуре. |
ConvertTo(Object, Type) |
Преобразует данное значение в указанный тип, используя заданные аргументы. |
ConvertToInvariantString(ITypeDescriptorContext, Object) |
Преобразует указанное значение в строковое представление для нейтральных языка и региональных параметров. |
ConvertToInvariantString(Object) |
Преобразует указанное значение в строковое представление для нейтральных языка и региональных параметров. |
ConvertToString(ITypeDescriptorContext, CultureInfo, Object) |
Преобразует данное значение в заданный тип, используя заданный контекст и сведения о языке и региональных параметрах. |
ConvertToString(ITypeDescriptorContext, Object) |
Преобразует данное значение в строку, используя данный контекст. |
ConvertToString(Object) |
Преобразует указанное значение в строковое представление. |
CreateInstance(IDictionary) |
Повторно создает объект Object, задающий набор значений свойств для объекта. |
CreateInstance(ITypeDescriptorContext, IDictionary) |
Создает экземпляр типа, с которым связан этот TypeConverter, используя заданный контекст с учетом набора значений свойств для объекта. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetConvertFromException(Object) |
Возвращает исключение, возникающее в случае, если невозможно выполнить преобразование. |
GetConvertToException(Object, Type) |
Возвращает исключение, возникающее в случае, если невозможно выполнить преобразование. |
GetCreateInstanceSupported() |
Возвращает значение, показывающее, требуется ли при изменении значения этого объекта вызывать метод CreateInstance(IDictionary), чтобы создать новое значение. |
GetCreateInstanceSupported(ITypeDescriptorContext) |
Возвращает значение, указывающее, требуется ли для изменения значения в этом объекте вызов CreateInstance(IDictionary), чтобы создать новое значение с помощью указанного контекста. |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetProperties(ITypeDescriptorContext, Object) |
Возвращает коллекцию свойств для типа массива, заданного параметром, используя заданный контекст. |
GetProperties(ITypeDescriptorContext, Object, Attribute[]) |
Возвращает коллекцию свойств для типа массива, заданного параметром value, используя заданные контекст и атрибуты. |
GetProperties(Object) |
Возвращает коллекцию свойств для типа массива, заданного параметром значения. |
GetPropertiesSupported() |
Возвращает значение, показывающее, поддерживаются ли свойства этим объектом. |
GetPropertiesSupported(ITypeDescriptorContext) |
Возвращает значение, показывающее, поддерживает ли данный объект свойства, используя заданный контекст. |
GetStandardValues() |
Возвращает коллекцию стандартных значений из контекста по умолчанию для типа данных, для которого предназначен этот преобразователь типов. |
GetStandardValues(ITypeDescriptorContext) |
Возвращает коллекцию стандартных значений для типа данных, для которого предназначен этот преобразователь типов при предоставлении с контекстом формата. |
GetStandardValuesExclusive() |
Возвращает значение, показывающее, является ли исчерпывающим списком коллекция стандартных значений, возвращаемая методом GetStandardValues(). |
GetStandardValuesExclusive(ITypeDescriptorContext) |
Используя заданный контекст, возвращает значение, показывающее, является ли исчерпывающим списком возможных значений коллекция стандартных значений, возвращаемая методом GetStandardValues(). |
GetStandardValuesSupported() |
Возвращает значение, показывающее, поддерживает ли объект стандартный набор значений, которые можно выбрать из списка. |
GetStandardValuesSupported(ITypeDescriptorContext) |
Получает значение, показывающее, поддерживает ли этот объект стандартный набор значений, которые можно выбрать из списка, используя заданную контекстную информацию. |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
IsValid(ITypeDescriptorContext, Object) |
Возвращает значение, показывающее, допустим ли для этого типа и указанного контекста данный объект значения. |
IsValid(Object) |
Возвращает значение, показывающее, допустим ли для этого типа данный объект значения. |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
SortProperties(PropertyDescriptorCollection, String[]) |
Сортирует коллекцию свойств. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Применяется к
См. также раздел
- TypeConverterAttribute
- PropertyDescriptorCollection
- TypeConverter.SimplePropertyDescriptor
- TypeConverter.StandardValuesCollection
- Общие сведения о преобразователях типов для XAML
- Атрибуты CLR, связанные с XAML, для пользовательских типов и библиотек
- Определение пользовательских типов для использования со службами XAML .NET
- Концептуальная документация по службам NET XAML