Func<T1,T2,T3,T4,TResult> Delegasikan
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Merangkum metode yang memiliki empat parameter dan mengembalikan nilai jenis yang ditentukan oleh TResult parameter .
generic <typename T1, typename T2, typename T3, typename T4, typename TResult>
public delegate TResult Func(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
public delegate TResult Func<in T1,in T2,in T3,in T4,out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
public delegate TResult Func<in T1,in T2,in T3,in T4,out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4) where T1 : allows ref struct where T2 : allows ref struct where T3 : allows ref struct where T4 : allows ref struct where TResult : allows ref struct;
public delegate TResult Func<T1,T2,T3,T4,TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
type Func<'T1, 'T2, 'T3, 'T4, 'Result> = delegate of 'T1 * 'T2 * 'T3 * 'T4 -> 'Result
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, Out TResult)(arg1 As T1, arg2 As T2, arg3 As T3, arg4 As T4) As TResult
Public Delegate Function Func(Of T1, T2, T3, T4, TResult)(arg1 As T1, arg2 As T2, arg3 As T3, arg4 As T4) As TResult
Jenis parameter
- T1
Jenis parameter pertama metode yang dienkapsulasi delegasi ini.
Parameter jenis ini bersifat kontravarian. Artinya, Anda bisa menggunakan jenis yang Anda tentukan atau jenis apa pun yang tidak banyak diturunkan. Untuk informasi lebih lanjut tentang kovariansi dan kontravariansi, lihat Kovariansi dan Kontravariansi dalam Generik.- T2
Jenis parameter kedua metode yang dienkapsulasi delegasi ini.
Parameter jenis ini bersifat kontravarian. Artinya, Anda bisa menggunakan jenis yang Anda tentukan atau jenis apa pun yang tidak banyak diturunkan. Untuk informasi lebih lanjut tentang kovariansi dan kontravariansi, lihat Kovariansi dan Kontravariansi dalam Generik.- T3
Jenis parameter ketiga metode yang dienkapsulasi delegasi ini.
Parameter jenis ini bersifat kontravarian. Artinya, Anda bisa menggunakan jenis yang Anda tentukan atau jenis apa pun yang tidak banyak diturunkan. Untuk informasi lebih lanjut tentang kovariansi dan kontravariansi, lihat Kovariansi dan Kontravariansi dalam Generik.- T4
Jenis parameter keempat metode yang dienkapsulasi delegasi ini.
Parameter jenis ini bersifat kontravarian. Artinya, Anda bisa menggunakan jenis yang Anda tentukan atau jenis apa pun yang tidak banyak diturunkan. Untuk informasi lebih lanjut tentang kovariansi dan kontravariansi, lihat Kovariansi dan Kontravariansi dalam Generik.- TResult
Jenis nilai pengembalian metode yang dienkapsulasi delegasi ini.
Parameter jenis ini bersifat kovarian. Artinya, Anda bisa menggunakan jenis yang Anda tentukan atau jenis apa pun yang lebih banyak diturunkan. Untuk informasi lebih lanjut tentang kovariansi dan kontravariansi, lihat Kovariansi dan Kontravariansi dalam Generik.Parameter
- arg1
- T1
Parameter pertama metode yang dienkapsulasi delegasi ini.
- arg2
- T2
Parameter kedua metode yang dienkapsulasi delegasi ini.
- arg3
- T3
Parameter ketiga dari metode yang dienkapsulasi delegasi ini.
- arg4
- T4
Parameter keempat metode yang dienkapsulasi delegasi ini.
Tampilkan Nilai
Nilai pengembalian metode yang dienkapsulasi delegasi ini.
Contoh
Contoh berikut menunjukkan cara mendeklarasikan dan menggunakan Func<T1,T2,TResult> delegasi. Contoh ini mendeklarasikan Func<T1,T2,TResult> variabel dan menetapkannya ekspresi lambda yang mengambil String nilai dan Int32 nilai sebagai parameter. Ekspresi lambda mengembalikan true jika panjang String parameter sama dengan nilai Int32 parameter. Delegasi yang merangkum metode ini kemudian digunakan dalam kueri untuk memfilter string dalam array string.
using System;
using System.Collections.Generic;
using System.Linq;
public class Func3Example
{
public static void Main()
{
Func<String, int, bool> predicate = (str, index) => str.Length == index;
String[] words = { "orange", "apple", "Article", "elephant", "star", "and" };
IEnumerable<String> aWords = words.Where(predicate).Select(str => str);
foreach (String word in aWords)
Console.WriteLine(word);
}
}
open System
open System.Linq
let predicate = Func<string, int, bool>(fun str index -> str.Length = index)
let words = [ "orange"; "apple"; "Article"; "elephant"; "star"; "and" ]
let aWords = words.Where predicate
for word in aWords do
printfn $"{word}"
Imports System.Collections.Generic
Imports System.Linq
Public Module Func3Example
Public Sub Main()
Dim predicate As Func(Of String, Integer, Boolean) = Function(str, index) str.Length = index
Dim words() As String = { "orange", "apple", "Article", "elephant", "star", "and" }
Dim aWords As IEnumerable(Of String) = words.Where(predicate)
For Each word As String In aWords
Console.WriteLine(word)
Next
End Sub
End Module
Keterangan
Anda dapat menggunakan delegasi ini untuk mewakili metode yang dapat diteruskan sebagai parameter tanpa secara eksplisit mendeklarasikan delegasi kustom. Metode yang dienkapsulasi harus sesuai dengan tanda tangan metode yang ditentukan oleh delegasi ini. Ini berarti bahwa metode yang dienkapsulasi harus memiliki empat parameter, yang masing-masing diteruskan ke dalamnya berdasarkan nilai, dan harus mengembalikan nilai.
Note
Untuk mereferensikan metode yang memiliki empat parameter dan mengembalikan void (unit di F#) (atau dalam Visual Basic, yang dinyatakan sebagai Sub daripada sebagai Function), gunakan delegasi Action<T1,T2,T3,T4> umum sebagai gantinya.
Saat Anda menggunakan Func<T1,T2,T3,T4,TResult> delegasi, Anda tidak perlu secara eksplisit menentukan delegasi yang merangkum metode dengan empat parameter. Misalnya, kode berikut secara eksplisit menyatakan delegasi generik bernama Searcher dan menetapkan referensi ke IndexOf metode ke instans delegasinya.
using System;
delegate int Searcher(string searchString, int start, int count,
StringComparison type);
public class DelegateExample
{
public static void Main()
{
string title = "The House of the Seven Gables";
int position = 0;
Searcher finder = title.IndexOf;
do
{
int characters = title.Length - position;
position = finder("the", position, characters,
StringComparison.InvariantCultureIgnoreCase);
if (position >= 0)
{
position++;
Console.WriteLine("'The' found at position {0} in {1}.",
position, title);
}
} while (position > 0);
}
}
open System
type Searcher = delegate of (string * int * int * StringComparison) -> int
let title = "The House of the Seven Gables"
let finder = Searcher title.IndexOf
let mutable position = 0
while position > -1 do
let characters = title.Length - position
position <-
finder.Invoke("the", position, characters, StringComparison.InvariantCultureIgnoreCase)
if position >= 0 then
position <- position + 1
printfn $"'The' found at position {position} in {title}."
Delegate Function Searcher(searchString As String, _
start As Integer, _
count As Integer, _
type As StringComparison) As Integer
Module DelegateExample
Public Sub Main()
Dim title As String = "The House of the Seven Gables"
Dim position As Integer = 0
Dim finder As Searcher = AddressOf title.IndexOf
Do
Dim characters As Integer = title.Length - position
position = finder("the", position, characters, _
StringComparison.InvariantCultureIgnoreCase)
If position >= 0 Then
position += 1
Console.WriteLine("'The' found at position {0} in {1}.", _
position, title)
End If
Loop While position > 0
End Sub
End Module
Contoh berikut menyederhanakan kode ini dengan membuat instans delegasi Func<T1,T2,T3,T4,TResult> alih-alih secara eksplisit menentukan delegasi baru dan menetapkan metode bernama untuknya.
using System;
public class DelegateExample
{
public static void Main()
{
string title = "The House of the Seven Gables";
int position = 0;
Func<string, int, int, StringComparison, int> finder = title.IndexOf;
do
{
int characters = title.Length - position;
position = finder("the", position, characters,
StringComparison.InvariantCultureIgnoreCase);
if (position >= 0)
{
position++;
Console.WriteLine("'The' found at position {0} in {1}.",
position, title);
}
} while (position > 0);
}
}
open System
let indexOf (s: string) s2 pos chars comparison =
s.IndexOf(s2, pos, chars, comparison)
let title = "The House of the Seven Gables"
let finder = Func<string, int, int, StringComparison, int>(indexOf title)
let mutable position = 0
while position > -1 do
let characters = title.Length - position
position <-
finder.Invoke("the", position, characters, StringComparison.InvariantCultureIgnoreCase)
if position >= 0 then
position <- position + 1
printfn $"'The' found at position {position} in {title}."
Module DelegateExample
Public Sub Main()
Dim title As String = "The House of the Seven Gables"
Dim position As Integer = 0
Dim finder As Func(Of String, Integer, Integer, StringComparison, Integer) _
= AddressOf title.IndexOf
Do
Dim characters As Integer = title.Length - position
position = finder("the", position, characters, _
StringComparison.InvariantCultureIgnoreCase)
If position >= 0 Then
position += 1
Console.WriteLine("'The' found at position {0} in {1}.", _
position, title)
End If
Loop While position > 0
End Sub
End Module
Anda dapat menggunakan Func<T1,T2,T3,T4,TResult> delegasi dengan metode anonim di C#, seperti yang diilustrasikan contoh berikut. (Untuk pengenalan metode anonim, lihat Metode Anonim.)
using System;
public class DelegateExample
{
public static void Main()
{
string title = "The House of the Seven Gables";
int position = 0;
Func<string, int, int, StringComparison, int> finder =
delegate(string s, int pos, int chars, StringComparison type)
{ return title.IndexOf(s, pos, chars, type); };
do
{
int characters = title.Length - position;
position = finder("the", position, characters,
StringComparison.InvariantCultureIgnoreCase);
if (position >= 0)
{
position++;
Console.WriteLine("'The' found at position {0} in {1}.",
position, title);
}
} while (position > 0);
}
}
Anda juga dapat menetapkan ekspresi lambda ke Func<T1,T2,TResult> delegasi, seperti yang diilustrasikan contoh berikut. (Untuk pengenalan ekspresi lambda, lihat Ekspresi Lambda (VB), Ekspresi Lambda (C#) dan Ekspresi Lambda (F#).)
using System;
public class DelegateExample
{
public static void Main()
{
string title = "The House of the Seven Gables";
int position = 0;
Func<string, int, int, StringComparison, int> finder =
(s, pos, chars, type) => title.IndexOf(s, pos, chars, type);
do
{
int characters = title.Length - position;
position = finder("the", position, characters,
StringComparison.InvariantCultureIgnoreCase);
if (position >= 0)
{
position++;
Console.WriteLine("'The' found at position {0} in {1}.",
position, title);
}
} while (position > 0);
}
}
open System
let title = "The House of the Seven Gables"
let finder =
Func<string, int, int, StringComparison, int>(fun s pos chars typ -> title.IndexOf(s, pos, chars, typ))
let mutable position = 0
while position > -1 do
let characters = title.Length - position
position <- finder.Invoke("the", position, characters, StringComparison.InvariantCultureIgnoreCase)
if position >= 0 then
position <- position + 1
printfn $"'The' found at position {position} in {title}."
Module DelegateExample
Public Sub Main()
Dim title As String = "The House of the Seven Gables"
Dim position As Integer = 0
Dim finder As Func(Of String, Integer, Integer, StringComparison, Integer) _
= Function(s, pos, chars, type) _
title.IndexOf(s, pos, chars, type)
Do
Dim characters As Integer = title.Length - position
position = finder("the", position, characters, _
StringComparison.InvariantCultureIgnoreCase)
If position >= 0 Then
position += 1
Console.WriteLine("'The' found at position {0} in {1}.", _
position, title)
End If
Loop While position > 0
End Sub
End Module
Jenis ekspresi lambda yang mendasar adalah salah satu delegasi generik Func . Ini memungkinkan untuk meneruskan ekspresi lambda sebagai parameter tanpa secara eksplisit menetapkannya ke delegasi. Secara khusus, karena banyak metode jenis di System.Linq namespace memiliki Func parameter, Anda dapat meneruskan metode ini ekspresi lambda tanpa secara eksplisit membuat Func instans delegasi.
Metode Ekstensi
| Nama | Deskripsi |
|---|---|
| GetMethodInfo(Delegate) |
Mendapatkan objek yang mewakili metode yang diwakili oleh delegasi yang ditentukan. |