Giriş
Şu satırı dahil ederiz.
Action Delegate en çok callback işleri için kullanlır.
Tanımlama
string parametre alıyorsa şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Örnek
Elimizde şöyle bir metod olsun.
Elimizde success ve failure için ayrı ayrı callback'ler çağıran bir metod olsun.
Method Alanı
Şöyle yaparız.
C++ Karşılığı
std::function'a denk geliyor.
Java Karşılığı
Delegate'in karşılığı Java'da tam olarak yok. Şöyle yaparız.
Şu satırı dahil ederiz.
using System.Action;
Delegate'in açıklaması şöyle.A Delegate is a neat way to pass a method around as a variable or parameter.C#'ta hazır gelen Action sınıfı var. Bu sınıfın tanımı şöyle
public delegate void Action();
void dönen, 0 veya n tane parametre alabilen bir delegate tanımıdır. Bu sınıfın kardeşi Func Delegate
Action Delegate en çok callback işleri için kullanlır.
Tanımlama
string parametre alıyorsa şöyle yaparız.
Action<string
> a = (str) => {...}
Constructor - Public Method İçinŞöyle yaparız.
class Handler
{
public void Add (int value) { ... }
}
var x = new Handler();
Action<int> func1 = x.Add;
Constructor - Static Method İçinŞöyle yaparız.
static class HandlerExtensions
{
public static void AddEx(this Handler instance, int value) { ... }
}
Action<Handler, int> func2 = HandlerExtensions.AddEx;
Constructor - LambdaÖrnek
Elimizde şöyle bir metod olsun.
void DoWork(Action callback)
{
Console.WriteLine("doing work");
callback();
}
Şöyle yaparız.DoWork(() => Console.WriteLine("callback called"));
ÖrnekElimizde success ve failure için ayrı ayrı callback'ler çağıran bir metod olsun.
public class MyResult
{
public Action OnSuccess { set; get; }
public Action OnError { set; get; }
}
void DoWork(MyResult callback)
{
Console.WriteLine("doing work");
callback.OnSuccess();
}
Şöyle yaparız.DoWork(new MyResult() {
OnSuccess = () => Console.WriteLine("Success"),
OnError = ()=>Console.WriteLine("Error") }
);
Şöyle yaparız.
class Program
{
private static string _value;
static void Main(string[] args)
{
var t = new Action(() => _value = "foo");
Console.Out.WriteLine("t.Method.IsStatic: {0}", t.Method.IsStatic);
}
}
DiğerC++ Karşılığı
std::function'a denk geliyor.
Java Karşılığı
Delegate'in karşılığı Java'da tam olarak yok. Şöyle yaparız.
public class Test {
public static void main(String[] args) throws Exception {
new Test().doWork(new Callback() { // implementing class
@Override
public void call() {
System.out.println("callback called");
}
});
}
public void doWork(Callback callback) {
System.out.println("doing work");
callback.call();
}
public interface Callback {
void call();
}
}
Hiç yorum yok:
Yorum Gönder