Action Temsilci
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Parametresi olmayan ve değer döndürmeyen bir yöntemi kapsüller.
public delegate void Action();
public delegate void Action();
type Action = delegate of unit -> unit
Public Delegate Sub Action()
Açıklamalar
Özel temsilciyi açıkça bildirmeden bir yöntemi parametre olarak geçirmek için bu temsilciyi kullanabilirsiniz. Kapsüllenen yöntem, bu temsilci tarafından tanımlanan yöntem imzasına karşılık olmalıdır. Bu, kapsüllenmiş yöntemin parametre ve dönüş değeri olmaması gerektiği anlamına gelir. (C# dilinde yöntemi döndürmelidirvoid
. F# dilinde işlev veya yöntem döndürmelidirunit
. Visual Basic'te ,...End Sub
yapısı tarafından Sub
tanımlanmalıdır. Yoksayılan bir değer döndüren bir yöntem de olabilir.) Genellikle, böyle bir yöntem bir işlemi gerçekleştirmek için kullanılır.
Not
Parametresi olmayan ve değer döndüren bir yönteme başvurmak için bunun yerine genel Func<TResult> temsilciyi kullanın.
Temsilciyi Action kullandığınızda, parametresiz bir yordamı kapsülleyen bir temsilciyi açıkça tanımlamanız gerekmez. Örneğin, aşağıdaki kod adlı ShowValue
bir temsilciyi açıkça bildirir ve örnek yöntemine Name.DisplayToWindow
temsilci örneğine bir başvuru atar.
using namespace System;
using namespace System::Windows::Forms;
public delegate void ShowValue();
public ref class Name
{
private:
String^ instanceName;
public:
Name(String^ name)
{
instanceName = name;
}
void DisplayToConsole()
{
Console::WriteLine(this->instanceName);
}
void DisplayToWindow()
{
MessageBox::Show(this->instanceName);
}
};
int main()
{
Name^ testName = gcnew Name(L"Koani");
ShowValue^ showMethod;
showMethod = gcnew ShowValue(testName, &Name::DisplayToWindow);
showMethod();
return 0;
}
using System;
using System.Windows.Forms;
public delegate void ShowValue();
public class Name
{
private string instanceName;
public Name(string name)
{
this.instanceName = name;
}
public void DisplayToConsole()
{
Console.WriteLine(this.instanceName);
}
public void DisplayToWindow()
{
MessageBox.Show(this.instanceName);
}
}
public class testTestDelegate
{
public static void Main()
{
Name testName = new Name("Koani");
ShowValue showMethod = testName.DisplayToWindow;
showMethod();
}
}
open System.Windows.Forms
type ShowValue = delegate of unit -> unit
type Name(name) =
member _.DisplayToConsole() =
printfn "%s" name
member _.DisplayToWindow() =
MessageBox.Show name |> ignore
let testName = Name "Koani"
let showMethod = ShowValue testName.DisplayToWindow
showMethod.Invoke()
Public Delegate Sub ShowValue
Public Class Name
Private instanceName As String
Public Sub New(name As String)
Me.instanceName = name
End Sub
Public Sub DisplayToConsole()
Console.WriteLine(Me.instanceName)
End Sub
Public Sub DisplayToWindow()
MsgBox(Me.instanceName)
End Sub
End Class
Public Module testDelegate
Public Sub Main()
Dim testName As New Name("Koani")
Dim showMethod As ShowValue = AddressOf testName.DisplayToWindow
showMethod
End Sub
End Module
Aşağıdaki örnek, yeni bir temsilciyi Action açıkça tanımlamak ve buna adlandırılmış bir yöntem atamak yerine temsilcinin örneğini oluşturarak bu kodu basitleştirir.
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Windows::Forms;
public ref class Name
{
private:
String^ instanceName;
public:
Name(String^ name)
{
instanceName = name;
}
void DisplayToConsole()
{
Console::WriteLine(this->instanceName);
}
void DisplayToWindow()
{
MessageBox::Show(this->instanceName);
}
};
int main()
{
Name^ testName = gcnew Name(L"Koani");
System::Action^ showMethod;
showMethod += gcnew Action(testName, &Name::DisplayToWindow);
showMethod();
return 0;
}
using System;
using System.Windows.Forms;
public class Name
{
private string instanceName;
public Name(string name)
{
this.instanceName = name;
}
public void DisplayToConsole()
{
Console.WriteLine(this.instanceName);
}
public void DisplayToWindow()
{
MessageBox.Show(this.instanceName);
}
}
public class testTestDelegate
{
public static void Main()
{
Name testName = new Name("Koani");
Action showMethod = testName.DisplayToWindow;
showMethod();
}
}
open System
open System.Windows.Forms
type Name(name) =
member _.DisplayToConsole() =
printfn "%s" name
member _.DisplayToWindow() =
MessageBox.Show name |> ignore
let testName = Name "Koani"
// unit -> unit functions and methods can be cast to Action.
let showMethod = Action testName.DisplayToWindow
showMethod.Invoke()
Public Class Name
Private instanceName As String
Public Sub New(name As String)
Me.instanceName = name
End Sub
Public Sub DisplayToConsole()
Console.WriteLine(Me.instanceName)
End Sub
Public Sub DisplayToWindow()
MsgBox(Me.instanceName)
End Sub
End Class
Public Module testDelegate
Public Sub Main()
Dim testName As New Name("Koani")
Dim showMethod As Action = AddressOf testName.DisplayToWindow
showMethod
End Sub
End Module
Aşağıdaki örnekte gösterildiği gibi temsilciyi Action C# dilinde anonim yöntemlerle de kullanabilirsiniz. (Anonim yöntemlere giriş için bkz . Anonim Yöntemler.)
using System;
using System.Windows.Forms;
public class Name
{
private string instanceName;
public Name(string name)
{
this.instanceName = name;
}
public void DisplayToConsole()
{
Console.WriteLine(this.instanceName);
}
public void DisplayToWindow()
{
MessageBox.Show(this.instanceName);
}
}
public class Anonymous
{
public static void Main()
{
Name testName = new Name("Koani");
Action showMethod = delegate() { testName.DisplayToWindow();} ;
showMethod();
}
}
Aşağıdaki örnekte gösterildiği gibi bir temsilci örneğine lambda Action ifadesi de atayabilirsiniz. (Lambda ifadelerine giriş için bkz. Lambda İfadeleri (C#) veya Lambda İfadeleri (F#).)
using System;
using System.Windows.Forms;
public class Name
{
private string instanceName;
public Name(string name)
{
this.instanceName = name;
}
public void DisplayToConsole()
{
Console.WriteLine(this.instanceName);
}
public void DisplayToWindow()
{
MessageBox.Show(this.instanceName);
}
}
public class LambdaExpression
{
public static void Main()
{
Name testName = new Name("Koani");
Action showMethod = () => testName.DisplayToWindow();
showMethod();
}
}
open System
open System.Windows.Forms
type Name(name) =
member _.DisplayToConsole() =
printfn "%s" name
member _.DisplayToWindow() =
MessageBox.Show name |> ignore
let testName = Name "Koani"
let showMethod = Action(fun () -> testName.DisplayToWindow())
showMethod.Invoke()
Public Class Name
Private instanceName As String
Public Sub New(name As String)
Me.instanceName = name
End Sub
Public Function DisplayToConsole() As Integer
Console.WriteLine(Me.instanceName)
Return 0
End Function
Public Function DisplayToWindow() As Integer
Return MsgBox(Me.instanceName)
End Function
End Class
Module LambdaExpression
Public Sub Main()
Dim name1 As New Name("Koani")
Dim methodCall As Action = Sub() name1.DisplayToWindow()
methodCall()
End Sub
End Module
Uzantı Metotları
GetMethodInfo(Delegate) |
Belirtilen temsilci tarafından temsil edilen yöntemi temsil eden bir nesnesi alır. |