delegenin (ya da bu konuda Action
) ait Func
ailesi
//.NET 4 and above
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T obj)
//.NET 3.5
public delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
public delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3)
vb Delegeler gibi ilan basit temsilci türleri başka bir şey değildir böylece/ref parametreler olabilir, bu durumda sizin için diğer cevaplar gibi kendi kendine özel bir uygulama meselesidir. Microsoft'un bunu varsayılan olarak neden paketlemediğine göre, gerektirecek çok sayıda bileşimi düşünün. Sadece iki parametre için
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(T1 obj1, out T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, out T2 obj2)
. ref
'a bile dokunmadık. Aslında geliştiriciler için hantal ve kafa karıştırıcı olurdu.
Benim gibi başka birinin kafası karışmışsa, yerleşik kişiler gibi "Func" temsilcisini çağırmak için * seçeneğiniz yok ... – Dunc
@Dunc - Düzeltildi. Yorumunuz için değil, gerçekten kafam karışmış olurdu. –
C# 4 (2010) ve daha sonra (cevabınızı yazdığınızda serbest bırakılmadı), T'yi kontravaryant olarak işaretlemek mümkündür ve "V" kovaryant olarak. Bununla birlikte, "U" türünde bir parametre ('output') *** tarafından *** aktarıldığından, 'U' birlikte veya kontravaryant olarak işaretlenemez ve" değişmez "olarak kalmalıdır. Yani, genel delege V MyDelegate'i T, U, V> (T girişi, U çıkışı) olarak düşünün; C# 4 veya daha sonra kullanırsanız. –