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

另一個常見的類型轉換器用法是將物件轉換成字串。 下列程式碼範例會列印儲存在 變數 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 類型轉換行為的自訂型別作者通常會實作類別,以支援字串中自己的唯 ConvertFromTypeConverter 行為。 此行為可啟用從以 XAML 屬性值提供之字串的類型轉換,並提供 XAML 處理器,並提供從字串建立物件所需的支援,讓物件可以在剖析的物件圖形中產生。 自訂型別或自訂型別的成員會藉由套用 TypeConverterAttribute 至定義來指出,而屬性會參考自訂 TypeConverter 實作。 如需詳細資訊,請參閱 XAML 概觀的類型轉換器

給繼承者的注意事項

繼承自 TypeConverter 以實作您自己的轉換需求。 當您繼承自這個類別時,可以覆寫下列方法:

注意:您的衍生型別可能標示為 internalprivate ,但可以使用 類別來建立 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[])

使用指定的內容和屬性 (attribute),傳回由該值參數所指定之陣列類型的屬性 (property) 集合。

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)

適用於

另請參閱