IteratorStateMachineAttribute Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menunjukkan apakah metode di Visual Basic ditandai dengan pengubah Iterator
.
public ref class IteratorStateMachineAttribute sealed : System::Runtime::CompilerServices::StateMachineAttribute
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=false, Inherited=false)]
public sealed class IteratorStateMachineAttribute : System.Runtime.CompilerServices.StateMachineAttribute
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=false, Inherited=false)]
[System.Serializable]
public sealed class IteratorStateMachineAttribute : System.Runtime.CompilerServices.StateMachineAttribute
[<System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=false, Inherited=false)>]
type IteratorStateMachineAttribute = class
inherit StateMachineAttribute
[<System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=false, Inherited=false)>]
[<System.Serializable>]
type IteratorStateMachineAttribute = class
inherit StateMachineAttribute
Public NotInheritable Class IteratorStateMachineAttribute
Inherits StateMachineAttribute
- Warisan
- Atribut
Contoh
Contoh berikut menunjukkan cara menentukan apakah metode adalah metode iterator. Dalam contoh, IsIteratorMethod
lakukan langkah-langkah berikut:
MethodInfo Mendapatkan objek untuk nama metode dengan menggunakan Type.GetMethod.
Type Mendapatkan objek untuk atribut dengan menggunakan Operator GetType.
Mendapatkan objek atribut untuk metode dan jenis atribut dengan menggunakan
MethodInfo.GetCustomAttribute
. JikaGetCustomAttribute
mengembalikanNothing
(Visual Basic), metode tidak berisi atribut .
Imports System.Collections.Generic
Imports System.Reflection
Imports System.Threading.Tasks
Imports System.Runtime.CompilerServices
Module Module1
' This class is used by the code below to discover method attributes.
Public Class TheClass
Public Async Function AsyncMethod() As Task(Of Integer)
Await Task.Delay(5)
Return 1
End Function
Public Iterator Function IteratorMethod() As IEnumerable(Of Integer)
Yield 1
Yield 2
End Function
Public Function RegularMethod() As Integer
Return 0
End Function
End Class
Private Function IsAsyncMethod(classType As Type, methodName As String)
' Obtain the method with the specified name.
Dim method As MethodInfo = classType.GetMethod(methodName)
Dim attType As Type = GetType(AsyncStateMachineAttribute)
Dim attrib = CType(method.GetCustomAttribute(attType), AsyncStateMachineAttribute)
' The above variable contains the StateMachineType property.
Return (attrib IsNot Nothing)
End Function
Private Function IsIteratorMethod(classType As Type, methodName As String)
' Obtain the method with the specified name.
Dim method As MethodInfo = classType.GetMethod(methodName)
Dim attType As Type = GetType(IteratorStateMachineAttribute)
' Obtain the custom attribute for the method.
' The value returned contains the StateMachineType property.
' Nothing is returned if the attribute isn't present for the method.
Dim attrib = CType(method.GetCustomAttribute(attType), IteratorStateMachineAttribute)
Return (attrib IsNot Nothing)
End Function
Private Sub ShowResult(classType As Type, methodName As String)
Console.Write((methodName & ": ").PadRight(16))
If IsAsyncMethod(classType, methodName) Then
Console.WriteLine("Async method")
ElseIf IsIteratorMethod(classType, methodName) Then
Console.WriteLine("Iterator method")
Else
Console.WriteLine("Regular method")
End If
' Note: The IteratorStateMachineAttribute applies to Visual Basic methods
' but not C# methods.
End Sub
Sub Main()
ShowResult(GetType(TheClass), "AsyncMethod")
ShowResult(GetType(TheClass), "IteratorMethod")
ShowResult(GetType(TheClass), "RegularMethod")
Console.ReadKey()
End Sub
' AsyncMethod: Async method
' IteratorMethod: Iterator method
' RegularMethod: Regular method
End Module
Keterangan
Anda tidak boleh menerapkan atribut ke IteratorStateMachine
metode dalam kode Anda. Untuk metode di Visual Basic yang memiliki pengubah Iterator , pengkompilasi akan menerapkan IteratorStateMachine
atribut di IL yang dipancarkannya.
Ketika metode (MethodName) di Visual Basic memiliki Iterator
pengubah, pengkompilasi memancarkan IL yang menyertakan struktur komputer status. Struktur tersebut berisi kode dalam metode . IL tersebut juga berisi metode stub (MethodName) yang memanggil ke mesin status. Pengkompilasi menambahkan atribut ke IteratorStateMachine
metode stub sehingga alat dapat mengidentifikasi mesin status yang sesuai. Detail IL yang dipancarkan mungkin berubah dalam rilis kompilator di masa mendatang.
Metode iterator melakukan iterasi kustom atas koleksi dengan menggunakan Yield
pernyataan (Visual Basic) untuk mengembalikan setiap elemen satu per satu. Untuk informasi selengkapnya, lihat Iterator.
Catatan
Anda tidak dapat menggunakan IteratorStateMachineAttribute
untuk menguji apakah metode adalah metode iterator di C#.
Konstruktor
IteratorStateMachineAttribute(Type) |
Menginisialisasi instans baru kelas IteratorStateMachineAttribute. |
Properti
StateMachineType |
Mengembalikan objek jenis untuk jenis mesin status yang mendasar yang dihasilkan oleh pengkompilasi untuk mengimplementasikan metode mesin status. (Diperoleh dari StateMachineAttribute) |
TypeId |
Ketika diimplementasikan di kelas turunan, mendapatkan pengidentifikasi unik untuk ini Attribute. (Diperoleh dari Attribute) |
Metode
Equals(Object) |
Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu. (Diperoleh dari Attribute) |
GetHashCode() |
Mengembalikan kode hash untuk instans ini. (Diperoleh dari Attribute) |
GetType() |
Mendapatkan dari instans Type saat ini. (Diperoleh dari Object) |
IsDefaultAttribute() |
Ketika ditimpa di kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan. (Diperoleh dari Attribute) |
Match(Object) |
Saat ditimpa di kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu. (Diperoleh dari Attribute) |
MemberwiseClone() |
Membuat salinan dangkal dari saat ini Object. (Diperoleh dari Object) |
ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |
Implementasi Antarmuka Eksplisit
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Memetakan sekumpulan nama ke sekumpulan pengidentifikasi pengiriman yang sesuai. (Diperoleh dari Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Mengambil informasi jenis untuk objek, yang dapat digunakan untuk mendapatkan informasi jenis untuk antarmuka. (Diperoleh dari Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Mengambil jumlah antarmuka informasi jenis yang disediakan objek (baik 0 atau 1). (Diperoleh dari Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Menyediakan akses ke properti dan metode yang diekspos oleh objek. (Diperoleh dari Attribute) |