語言

ConfigurationConverterBase 類別

定義

配置轉換器類型的基礎類別。

public ref class ConfigurationConverterBase abstract : System::ComponentModel::TypeConverter
public abstract class ConfigurationConverterBase : System.ComponentModel.TypeConverter
type ConfigurationConverterBase = class
    inherit TypeConverter
Public MustInherit Class ConfigurationConverterBase
Inherits TypeConverter
繼承
ConfigurationConverterBase
衍生

範例

以下程式碼範例說明如何從類別 ConfigurationConverterBase 推導出自訂 TimeSpan 轉換器類型。 另外,範例展示了如何在自訂區段中使用這個類型。

以下程式碼範例說明如何從TimeSpan類別中建立自訂ConfigurationConverterBase轉換器類型。

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Globalization;
using System.ComponentModel;

public sealed class CustomTimeSpanMinutesConverter :
    ConfigurationConverterBase
{
    internal bool ValidateType(object value, 
        Type expected)
    {
        bool result;

        if ((value != null) &&
            (value.GetType() != expected))
            result = false;
        else
            result = true;

        return result;
    }

    public override bool CanConvertTo(
        ITypeDescriptorContext ctx, Type type)
    {
        return (type == typeof(string));
    }

    public override bool CanConvertFrom(
        ITypeDescriptorContext ctx, Type type)
    {
        return (type == typeof(string));
    }

    public override object ConvertTo(
        ITypeDescriptorContext ctx, CultureInfo ci,
        object value, Type type)
    {
        ValidateType(value, typeof(TimeSpan));

        long data = (long)(((TimeSpan)value).TotalMinutes);

        return data.ToString(CultureInfo.InvariantCulture);
    }

    public override object ConvertFrom(
        ITypeDescriptorContext ctx, CultureInfo ci, object data)
    {

        long min = long.Parse((string)data,
            CultureInfo.InvariantCulture);

        return TimeSpan.FromMinutes((double)min);
    }
}
Imports System.Collections.Generic
Imports System.Text
Imports System.Configuration
Imports System.Globalization
Imports System.ComponentModel




NotInheritable Public Class CustomTimeSpanMinutesConverter
    Inherits ConfigurationConverterBase
    
    Friend Function ValidateType(ByVal value As Object, _
    ByVal expected As Type) As Boolean
        Dim result As Boolean

        If Not (value Is Nothing) _
        AndAlso value.ToString() <> expected.ToString() Then
            result = False
        Else
            result = True
        End If
        Return result

    End Function 'ValidateType
    
    
    Public Overrides Function CanConvertTo( _
    ByVal ctx As ITypeDescriptorContext, _
    ByVal type As Type) As Boolean
        Return (type.ToString() = GetType(String).ToString())

    End Function 'CanConvertTo
    
    Public Overrides Function CanConvertFrom( _
    ByVal ctx As ITypeDescriptorContext, _
    ByVal type As Type) As Boolean
        Return (type.ToString() = GetType(String).ToString())

    End Function 'CanConvertFrom
    
    Public Overrides Function ConvertTo( _
    ByVal ctx As ITypeDescriptorContext, _
    ByVal ci As CultureInfo, ByVal value As Object, _
    ByVal type As Type) As Object
        ValidateType(value, GetType(TimeSpan))

        Dim data As Long = _
        Fix(CType(value, TimeSpan).TotalMinutes)

        Return data.ToString(CultureInfo.InvariantCulture)

    End Function 'ConvertTo
    
    Public Overrides Function ConvertFrom( _
    ByVal ctx As ITypeDescriptorContext, _
    ByVal ci As CultureInfo, ByVal data As Object) As Object

        Dim min As Long = _
        Long.Parse(CStr(data), CultureInfo.InvariantCulture)

        Return TimeSpan.FromMinutes(System.Convert.ToDouble(min))

    End Function 'ConvertFrom

End Class

以下程式碼範例說明如何定義使用先前自訂 TimeSpan 轉換器的自訂區段。


    // Define a custom section.
    public sealed class CustomSection :
        ConfigurationSection
    {

        public CustomSection() 
        {
        }

        [ConfigurationProperty("fileName", DefaultValue="   default.txt  ")]
        [TypeConverter(typeof(WhiteSpaceTrimStringConverter))]
        public String FileName
        {
            get
            {
                return (String)this["fileName"];
            }
            set
            {
                this["fileName"] = value;
            }
        }

        [ConfigurationProperty("maxIdleTime")]
        [TypeConverter(typeof(CustomizedTimeSpanMinutesConverter))]
        public TimeSpan MaxIdleTime
        {
            get
            {
                return (TimeSpan)this["maxIdleTime"];
            }
            set
            {
                this["maxIdleTime"] = value;
            }
        }

        [ConfigurationProperty("timeDelay", 
            DefaultValue = "infinite")]
        [TypeConverter(typeof(InfiniteTimeSpanConverter))]
        public TimeSpan TimeDelay
        {
            get
            {
                return (TimeSpan)this["timeDelay"];
            }
            set
            {
                this["timeDelay"] = value;
            }
        }

        [ConfigurationProperty("cdStr", 
            DefaultValue = "str0, str1",
           IsRequired = true)]

        [TypeConverter(typeof(
            CommaDelimitedStringCollectionConverter))]
        public StringCollection CdStr
        {
            get
            {
                return (StringCollection)this["cdStr"];
            }

            set
            {
                this["cdStr"] = value;
            }
        }


        public enum Permissions
        {
            FullControl         = 0,
            Modify              = 1,
            ReadExecute         = 2,
            Read                = 3,
            Write               = 4,
            SpecialPermissions  = 5
        }

        [ConfigurationProperty("permission", DefaultValue = Permissions.Read)]
        public Permissions Permission
        {
            get
            {
                return (Permissions)this["permission"];
            }

            set
            {
                this["permission"] = value;
            }
        }

        [ConfigurationProperty("maxUsers", DefaultValue="infinite")]
        [TypeConverter(typeof(InfiniteIntConverter))]
        public int MaxUsers
        {
            get
            {
                return (int)this["maxUsers"];
            }
            set
            {
                this["maxUsers"] = value;
            }
        }
    }
}
' Define a custom section.
NotInheritable Public Class CustomSection
    Inherits ConfigurationSection
    
    
    Public Sub New() 
    
    End Sub
    
    
    
    <ConfigurationProperty("fileName", _
    DefaultValue:="   default.txt  "), _
    TypeConverter(GetType(WhiteSpaceTrimStringConverter))> _
    Public Property FileName() As String
        Get
            Return CStr(Me("fileName"))
        End Get
        Set(ByVal value As String)
            Me("fileName") = value
        End Set
    End Property

    
    <ConfigurationProperty("maxIdleTime"), _
    TypeConverter(GetType(CustomizedTimeSpanMinutesConverter))> _
    Public Property MaxIdleTime() As TimeSpan
        Get
            Return CType(Me("maxIdleTime"), TimeSpan)
        End Get
        Set(ByVal value As TimeSpan)
            Me("maxIdleTime") = value
        End Set
    End Property
    
    <ConfigurationProperty("timeDelay", _
    DefaultValue:="infinite"), _
    TypeConverter(GetType(InfiniteTimeSpanConverter))> _
    Public Property TimeDelay() As TimeSpan
        Get
            Return CType(Me("timeDelay"), TimeSpan)
        End Get
        Set(ByVal value As TimeSpan)
            Me("timeDelay") = Value
        End Set
    End Property
    
    <ConfigurationProperty("cdStr", _
    DefaultValue:="str0, str1", _
    IsRequired:=True), _
    TypeConverter(GetType(CommaDelimitedStringCollectionConverter))> _
    Public Property CdStr() As StringCollection
        Get
            Return CType(Me("cdStr"), StringCollection)
        End Get

        Set(ByVal value As StringCollection)
            Me("cdStr") = value
        End Set
    End Property
    
    
    Public Enum Permissions
        FullControl = 0
        Modify = 1
        ReadExecute = 2
        Read = 3
        Write = 4
        SpecialPermissions = 5
    End Enum 'Permissions
    
    
    <ConfigurationProperty("permission", _
    DefaultValue:=Permissions.Read)> _
    Public Property Permission() As Permissions
        Get
            Return CType(Me("permission"), Permissions)
        End Get

        Set(ByVal value As Permissions)
            Me("permission") = Value
        End Set
    End Property
    
    
    <ConfigurationProperty("maxUsers", _
    DefaultValue:="infinite"), _
    TypeConverter(GetType(InfiniteIntConverter))> _
    Public Property MaxUsers() As Integer
        Get
            Return Fix(Me("maxUsers"))
        End Get
        Set(ByVal value As Integer)
            Me("maxUsers") = Value
        End Set
    End Property
End Class

以下程式碼範例展示了如何使用前述自訂區段建立與修改設定檔。

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Globalization;
using System.ComponentModel;

namespace Samples.AspNet
{

    // Define a custom section.
    public sealed class CustomSection :
        ConfigurationSection
    {

        public CustomSection()
        { }

        [ConfigurationProperty("fileName", DefaultValue = "default.txt",
            IsRequired = true, IsKey = false)]
        [StringValidator(InvalidCharacters = " ~!@#$%^&*()[]{}/;'\"|\\",
            MinLength = 1, MaxLength = 60)]
        public string FileName
        {
            get
            {
                return (string)this["fileName"];
            }
            set
            {
                this["fileName"] = value;
            }
        }

        [ConfigurationProperty("maxIdleTime")]
        [TypeConverter(typeof(TsMinutesConverter))]
        public TimeSpan MaxIdleTime
        {
            get
            {
                return (TimeSpan)this["maxIdleTime"];
            }
            set
            {
                this["maxIdleTime"] = value;
            }
        }
    }

    public sealed class TsMinutesConverter :
        ConfigurationConverterBase
    {
        internal bool ValidateType(object value, Type expected)
        {
            bool result;

            if ((value != null) &&
                (value.GetType() != expected))
                result = false;
            else
                result = true;

            return result;
        }

        public override bool CanConvertTo(
            ITypeDescriptorContext ctx, Type type)
        {
            return (type == typeof(string));
        }

        public override bool CanConvertFrom(
            ITypeDescriptorContext ctx, Type type)
        {
            return (type == typeof(string));
        }

        public override object ConvertTo(
            ITypeDescriptorContext ctx, CultureInfo ci,
            object value, Type type)
        {
            ValidateType(value, typeof(TimeSpan));

            long data = (long)(((TimeSpan)value).TotalMinutes);

            return data.ToString(CultureInfo.InvariantCulture);
        }

        public override object ConvertFrom(
            ITypeDescriptorContext ctx, CultureInfo ci, object data)
        {

            long min = long.Parse((string)data,
                CultureInfo.InvariantCulture);

            return TimeSpan.FromMinutes((double)min);
        }
    }

    class UsingConfigutationConverterBase
    {

        // Create a custom section.
        static void CreateSection()
        {
            try
            {

                CustomSection customSection;

                // Get the current configuration file.
                System.Configuration.Configuration config =
                        ConfigurationManager.OpenExeConfiguration(
                        ConfigurationUserLevel.None);

                // Create the section entry  
                // in the <configSections> and the 
                // related target section in <configuration>.
                if (config.Sections["CustomSection"] == null)
                {
                    customSection = new CustomSection();
                    config.Sections.Add("CustomSection", customSection);
                    customSection.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Full);
                }
            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }
        }

        // Change custom section and write it to disk.
        static void SerializeCustomSection()
        {
            try
            {
                System.Configuration.Configuration config =
                    ConfigurationManager.OpenExeConfiguration(
                    ConfigurationUserLevel.None);

                CustomSection customSection =
                    config.Sections.Get("CustomSection")
                    as CustomSection;

                TimeSpan ts =
                    new TimeSpan(1, 30, 30);

                customSection.MaxIdleTime = ts;

                config.Save();

                string maxIdleTime =
                    customSection.MaxIdleTime.ToString();

                Console.WriteLine("New max idle time: {0}",
                    maxIdleTime);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }

        // Read custom section from disk.
        static void DeserializeCustomSection()
        {

            try
            {
                System.Configuration.Configuration config =
                    ConfigurationManager.OpenExeConfiguration(
                    ConfigurationUserLevel.None);

                CustomSection customSection =
                    config.Sections.Get("CustomSection")
                    as CustomSection;

                TimeSpan maxIdleTime =
                    customSection.MaxIdleTime;

                Console.WriteLine("Max idle time: {0}",
                    maxIdleTime.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }

        static void Main(string[] args)
        {
            CreateSection();
            SerializeCustomSection();
            DeserializeCustomSection();
        }
    }
}
Imports System.Collections.Generic
Imports System.Text
Imports System.Configuration
Imports System.Globalization
Imports System.ComponentModel



' Define a custom section.

NotInheritable Public Class CustomSection
   Inherits ConfigurationSection
   
   
   Public Sub New()
   End Sub
   
   
    <ConfigurationProperty("fileName", _
    DefaultValue:="default.txt", _
    IsRequired:=True, IsKey:=False), _
    StringValidator(InvalidCharacters:=" ~!@#$%^&*()[]{}/;'""|\", _
    MinLength:=1, MaxLength:=60)> _
    Public Property FileName() As String
        Get
            Return CStr(Me("fileName"))
        End Get
        Set(ByVal value As String)
            Me("fileName") = value
        End Set
    End Property
   
   
   
    <ConfigurationProperty("maxIdleTime"), _
    TypeConverter(GetType(TsMinutesConverter))> _
    Public Property MaxIdleTime() As TimeSpan
        Get
            Return CType(Me("maxIdleTime"), TimeSpan)
        End Get
        Set(ByVal value As TimeSpan)
            Me("maxIdleTime") = Value
        End Set
    End Property

End Class


NotInheritable Public Class TsMinutesConverter
   Inherits ConfigurationConverterBase
   
   Friend Function ValidateType(value As Object, expected As Type) As Boolean
      Dim result As Boolean
      
        If Not (value Is Nothing) _
        AndAlso (value.GetType().Equals(expected) <> True) Then
            result = False
        Else
            result = True
        End If
      Return result
   End Function 'ValidateType
   
   
    Public Overrides Function CanConvertTo( _
    ByVal ctx As ITypeDescriptorContext, _
    ByVal type As Type) As Boolean

        Return type.Equals(GetType(String))

    End Function 'CanConvertTo
   

    Public Overrides Function CanConvertFrom( _
    ByVal ctx As ITypeDescriptorContext, _
    ByVal type As Type) As Boolean

        Return type.Equals(GetType(String))

    End Function 'CanConvertFrom
   

    Public Overrides Function ConvertTo( _
    ByVal ctx As ITypeDescriptorContext, ByVal ci As CultureInfo, _
    ByVal value As Object, ByVal type As Type) As Object
        ValidateType(value, GetType(TimeSpan))

        Dim data As Long = _
        Fix(CType(value, TimeSpan).TotalMinutes)

        Return data.ToString(CultureInfo.InvariantCulture)

    End Function 'ConvertTo
   
   
    Public Overrides Function ConvertFrom( _
    ByVal ctx As ITypeDescriptorContext, ByVal ci As CultureInfo, _
    ByVal data As Object) As Object

        Dim min As Long = _
        Long.Parse(CStr(data), _
        CultureInfo.InvariantCulture)

        Return TimeSpan.FromMinutes( _
        System.Convert.ToDouble(min))

    End Function 'ConvertFrom
End Class

Class UsingConfigutationConverterBase
   
   
   ' Create a custom section.
   Shared Sub CreateSection()
      Try
         
         Dim customSection As CustomSection
         
         ' Get the current configuration file.
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)
         
         ' Create the section entry  
         ' in the <configSections> and the 
         ' related target section in <configuration>.
         If config.Sections("CustomSection") Is Nothing Then
            customSection = New CustomSection()
            config.Sections.Add("CustomSection", customSection)
            customSection.SectionInformation.ForceSave = True
            config.Save(ConfigurationSaveMode.Full)
         End If
      Catch err As ConfigurationErrorsException
         Console.WriteLine(err.ToString())
      End Try
   End Sub
    
   
   
   ' Change custom section and write it to disk.
   Shared Sub SerializeCustomSection()
      Try
            Dim config _
               As System.Configuration.Configuration = _
               ConfigurationManager.OpenExeConfiguration( _
               ConfigurationUserLevel.None)

            Dim customSection _
            As CustomSection = _
            config.Sections.Get("CustomSection")
         Dim ts As New TimeSpan(1, 30, 30)
         
         customSection.MaxIdleTime = ts
         
         config.Save()
         
            Dim maxIdleTime As String = _
            customSection.MaxIdleTime.ToString()
         
            Console.WriteLine( _
            "New max idle time: {0}", maxIdleTime)
      Catch e As Exception
         Console.WriteLine(e.ToString())
      End Try
   End Sub
    
   
   ' Read custom section from disk.
   Shared Sub DeserializeCustomSection()
      
      Try
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)
         
            Dim customSection _
            As CustomSection = _
            config.Sections.Get("CustomSection")
         
            Dim maxIdleTime As TimeSpan = _
            customSection.MaxIdleTime
         
         
            Console.WriteLine( _
            "Max idle time: {0}", maxIdleTime.ToString())
      Catch e As Exception
         Console.WriteLine(e.ToString())
      End Try
   End Sub
   

    Public Overloads Shared Sub Main(ByVal args() As String)
        CreateSection()
        SerializeCustomSection()
        DeserializeCustomSection()
    End Sub
End Class

以下是前述範例所使用的配置摘錄。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="CustomSection"
      type="Samples.AspNet.CustomSection,
      ConfigurationConverters,
      Version=1.0.0.0, Culture=neutral,
      PublicKeyToken=null"
      allowDefinition="Everywhere"
      allowExeDefinition="MachineToApplication"
      restartOnExternalChanges="true" />
  </configSections>
  <CustomSection fileName="default.txt" maxIdleTime="90" />
</configuration>

備註

是 ConfigurationConverterBase 轉換器配置類型的基礎類別。 這些類型會將設定檔中的字串轉換成與相關強型別屬性的關聯。

建構函式

名稱 Description
ConfigurationConverterBase()

初始化 ConfigurationConverterBase 類別的新執行個體。

方法

名稱 Description
CanConvertFrom(ITypeDescriptorContext, Type)

決定是否允許轉換。

CanConvertFrom(Type)

回傳此轉換器是否能將指定類型的物件轉換為該轉換器的類型。

(繼承來源 TypeConverter)
CanConvertTo(ITypeDescriptorContext, Type)

決定是否允許轉換。

CanConvertTo(Type)

回傳此轉換器是否能將物件轉換為指定類型。

(繼承來源 TypeConverter)
ConvertFrom(ITypeDescriptorContext, CultureInfo, Object)

利用指定的上下文與文化資訊,將給定物件轉換為該轉換器的類型。

(繼承來源 TypeConverter)
ConvertFrom(Object)

將給定值轉換為該轉換器的類型。

(繼承來源 TypeConverter)
ConvertFromInvariantString(ITypeDescriptorContext, String)

利用不變文化與指定的上下文,將給定字串轉換為該轉換器的類型。

(繼承來源 TypeConverter)
ConvertFromInvariantString(String)

利用不變培養法將給定字串轉換為該轉換器的類型。

(繼承來源 TypeConverter)
ConvertFromString(ITypeDescriptorContext, CultureInfo, String)

利用指定的上下文與文化資訊,將給定文本轉換為物件。

(繼承來源 TypeConverter)
ConvertFromString(ITypeDescriptorContext, String)

將給定文字轉換為物件,並依照指定的上下文。

(繼承來源 TypeConverter)
ConvertFromString(String)

將指定的文字轉換成物件。

(繼承來源 TypeConverter)
ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type)

使用指定的內容和文化特性資訊,將指定的值物件轉換成指定的型別。

(繼承來源 TypeConverter)
ConvertTo(Object, Type)

利用參數將給定值物件轉換為指定的型別。

(繼承來源 TypeConverter)
ConvertToInvariantString(ITypeDescriptorContext, Object)

將指定的值轉換為文化不變的字串表示法,並依照指定的上下文進行。

(繼承來源 TypeConverter)
ConvertToInvariantString(Object)

將指定的值轉換為文化不變的字串表示。

(繼承來源 TypeConverter)
ConvertToString(ITypeDescriptorContext, CultureInfo, Object)

利用指定的上下文與文化資訊,將給定值轉換為字串表示。

(繼承來源 TypeConverter)
ConvertToString(ITypeDescriptorContext, Object)

利用給定上下文將給定值轉換為字串表示。

(繼承來源 TypeConverter)
ConvertToString(Object)

將指定的值轉換為字串表示。

(繼承來源 TypeConverter)
CreateInstance(IDictionary)

為物件重建 Object 一組給定的屬性值。

(繼承來源 TypeConverter)
CreateInstance(ITypeDescriptorContext, IDictionary)

根據指定的上下文,根據物件的屬性值,建立該物件所關聯類型的 TypeConverter 實例。

(繼承來源 TypeConverter)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetConvertFromException(Object)

當無法執行轉換時,回傳一個例外以拋出。

(繼承來源 TypeConverter)
GetConvertToException(Object, Type)

當無法執行轉換時,回傳一個例外以拋出。

(繼承來源 TypeConverter)
GetCreateInstanceSupported()

回傳變更此物件值是否需要呼叫 CreateInstance(IDictionary) 該方法以建立新值。

(繼承來源 TypeConverter)
GetCreateInstanceSupported(ITypeDescriptorContext)

回傳是否需要在指定上下文下, CreateInstance(IDictionary) 變更此物件的值以建立新值。

(繼承來源 TypeConverter)
GetHashCode()

做為預設哈希函式。

(繼承來源 Object)
GetProperties(ITypeDescriptorContext, Object, Attribute[])

回傳一組由值參數指定的陣列類型屬性,使用指定的上下文與屬性。

(繼承來源 TypeConverter)
GetProperties(ITypeDescriptorContext, Object)

回傳一組由值參數指定的陣列類型屬性,並依照指定的上下文。

(繼承來源 TypeConverter)
GetProperties(Object)

回傳一組由值參數指定的陣列類型屬性。

(繼承來源 TypeConverter)
GetPropertiesSupported()

回傳此物件是否支援屬性。

(繼承來源 TypeConverter)
GetPropertiesSupported(ITypeDescriptorContext)

回傳該物件是否支援屬性,並依照指定的上下文。

(繼承來源 TypeConverter)
GetStandardValues()

從預設上下文回傳一組標準值,針對此類型轉換器所設計的資料型別。

(繼承來源 TypeConverter)
GetStandardValues(ITypeDescriptorContext)

當提供格式上下文時,回傳一組標準值,針對此類型轉換器所設計的資料型別。

(繼承來源 TypeConverter)
GetStandardValuesExclusive()

回傳從 GetStandardValues() 返回的標準值集合是否為排他列表。

(繼承來源 TypeConverter)
GetStandardValuesExclusive(ITypeDescriptorContext)

回傳從 返回的 GetStandardValues() 標準值集合是否為一個可能值的排他清單,且需使用指定的上下文。

(繼承來源 TypeConverter)
GetStandardValuesSupported()

回傳此物件是否支援可從列表中選取的標準值集合。

(繼承來源 TypeConverter)
GetStandardValuesSupported(ITypeDescriptorContext)

回傳此物件是否支援可從指定上下文中選擇的標準值集合。

(繼承來源 TypeConverter)
GetType()

取得目前實例的 Type。

(繼承來源 Object)
IsValid(ITypeDescriptorContext, Object)

回傳給定值物件是否適用於此類型及指定上下文。

(繼承來源 TypeConverter)
IsValid(Object)

回傳給定值物件是否適用於此類型。

(繼承來源 TypeConverter)
MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
SortProperties(PropertyDescriptorCollection, String[])

整理一組屬性。

(繼承來源 TypeConverter)
ToString()

傳回表示目前 物件的字串。

(繼承來源 Object)

適用於

另請參閱