Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Temsilci kendi tür parametrelerini tanımlayabilir. Genel temsilciye başvuran kod, aşağıdaki örnekte gösterildiği gibi genel bir sınıfın örneğini oluştururken veya genel bir yöntemi çağırırken olduğu gibi kapalı oluşturulmuş bir tür oluşturmak için tür bağımsız değişkenini belirtebilir:
public delegate void Del<T>(T item);
public static void Notify(int i) { }
Del<int> m1 = new Del<int>(Notify);
C# sürüm 2.0,yöntem grubu dönüştürme adlı yeni bir özelliğe sahiptir ve bu özellik hem somut hem de genel temsilci türleri için geçerlidir ve bu basitleştirilmiş söz dizimi ile önceki satırı yazmanızı sağlar:
Del<int> m2 = Notify;
Genel bir sınıf içinde tanımlanan temsilciler, genel sınıf türü parametrelerini sınıf yöntemleriyle aynı şekilde kullanabilir.
class Stack<T>
{
public delegate void StackDelegate(T[] items);
}
Temsilciye başvuran kod, aşağıdaki gibi sınıfın içerdiği tür bağımsız değişkenini belirtmelidir.
private static void DoWork(float[] items) { }
public static void TestStack()
{
Stack<float> s = new Stack<float>();
Stack<float>.StackDelegate d = DoWork;
}
Genel delege türleri, tipik tasarım desenine göre olayları tanımlamada özellikle yararlıdır çünkü gönderici bağımsız değişkeni güçlü bir şekilde tiplenebilir ve artık Object ile dönüşüm yapmak zorunda kalmaz.
delegate void StackEventHandler<T, U>(T sender, U eventArgs);
class Stack<T>
{
public class StackEventArgs : System.EventArgs { }
public event StackEventHandler<Stack<T>, StackEventArgs>? StackEvent;
protected virtual void OnStackChanged(StackEventArgs a)
{
if (StackEvent is not null)
StackEvent(this, a);
}
}
class SampleClass
{
public void HandleStackChange<T>(Stack<T> stack, Stack<T>.StackEventArgs args) { }
}
public static void Test()
{
Stack<double> s = new Stack<double>();
SampleClass o = new SampleClass();
s.StackEvent += o.HandleStackChange;
}