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)、 GetStandardValuesSupported(ITypeDescriptorContext)GetStandardValuesExclusive(ITypeDescriptorContext)和 IsValid(ITypeDescriptorContext, Object) 方法。
注意:您的衍生型別可能標示為 internal
或 private
,但可以使用 類別來建立 TypeDescriptor 類型的實例。 假設呼叫端受信任,請勿撰寫不安全的程序代碼。 假設呼叫端可能會在部分信任中建立類型的實例。
如需一般 (非 XAML) 用途之類型轉換器的詳細資訊,請參閱 如何:實作類型轉換子 或 一般化類型轉換。
建構函式
TypeConverter() |
初始化 TypeConverter 類別的新執行個體。 |