Semua delegasi Fungsi mengembalikan nilai. Apa yang dimaksud dengan delegasi .NET yang dapat digunakan dengan metode yang mengembalikan batal?
561
Semua delegasi Funcar mengembalikan sesuatu; semua delegasi Action kembali batal.
Func<TResult>
tidak mengambil argumen dan mengembalikan TResult:
public delegate TResult Func<TResult>()
Action<T>
mengambil satu argumen dan tidak mengembalikan nilai:
public delegate void Action<T>(T obj)
Action
adalah delegasi 'telanjang' yang paling sederhana:
public delegate void Action()
Ada juga Func<TArg1, TResult>
dan Action<TArg1, TArg2>
(dan lainnya hingga 16 argumen). Semua ini (kecuali untuk Action<T>
) adalah baru untuk. NET 3.5 (didefinisikan dalam System.Core).
Func<,,, ... ,>
) di .NET 4.0, tetapi delapan jenis terakhir dari setiap "seri" didefinisikan dalamSystem.Core.dll
, bukan dimscorlib.dll
, sehingga akan menjadi alasan mengapa michielvoo tidak melihat mereka. Namun, tidak ada lagi Fungsi atau Tindakan yang ditambahkan dalam .NET versi 4.5 dan 4.5.1. Apakah urutan ini menjadi A170836 atau A170875 ? Tetap disini.Saya percaya
Action
adalah solusi untuk ini.sumber
Itu tidak benar. Mereka semua mengambil setidaknya satu jenis argumen, tetapi argumen itu menentukan jenis pengembalian.
Jadi
Func<T>
tidak menerima parameter dan mengembalikan nilai. GunakanAction
atauAction<T>
ketika Anda tidak ingin mengembalikan nilai.sumber
Coba
System.Func<T>
danSystem.Action
sumber
Converter<TInput, TOutput>
yang seperti nantiFunc<T, TResult>
. Itu digunakan dalamList<>.ConvertAll
metode yang memproyeksikan setiap elemen dalamList<>
ke objek lain, dan menempatkan semua "nilai fungsi" dalam yang baruList<>
. (Belakangan, orang sering menggunakan LinqSelect
untuk itu.)Kadang-kadang Anda ingin menulis delegasi untuk penanganan acara, dalam hal ini Anda dapat memanfaatkan
System.EvenHandler<T>
yang secara implisit menerima argumen tipeobject
selain parameter kedua yang harus diturunkanEventArgs
. EventHandlers akan kembalivoid
Saya pribadi menemukan ini berguna selama pengujian untuk membuat panggilan balik satu kali di badan fungsi.
sumber
Jika Anda menulis untuk
System.Windows.Forms
, Anda juga dapat menggunakan:sumber
Cara yang sangat mudah untuk memanggil subrutin nilai return dan non return. menggunakan Fungsi dan Aksi masing-masing. (lihat juga https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx )
Coba ini contoh ini
sumber