Func<T1,T2,T3,TResult> Temsilci
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Üç parametresi olan bir yöntemi kapsüller ve parametresi tarafından TResult
belirtilen türde bir değer döndürür.
generic <typename T1, typename T2, typename T3, typename TResult>
public delegate TResult Func(T1 arg1, T2 arg2, T3 arg3);
public delegate TResult Func<in T1,in T2,in T3,out TResult>(T1 arg1, T2 arg2, T3 arg3);
public delegate TResult Func<T1,T2,T3,TResult>(T1 arg1, T2 arg2, T3 arg3);
type Func<'T1, 'T2, 'T3, 'Result> = delegate of 'T1 * 'T2 * 'T3 -> 'Result
Public Delegate Function Func(Of In T1, In T2, In T3, Out TResult)(arg1 As T1, arg2 As T2, arg3 As T3) As TResult
Public Delegate Function Func(Of T1, T2, T3, TResult)(arg1 As T1, arg2 As T2, arg3 As T3) As TResult
Tür Parametreleri
- T1
Bu temsilcinin kapsüllediğini yöntemin ilk parametresinin türü.
Bu genel tür parametresi kontravaryanttır. Bu, kendi belirttiğiniz türü veya daha az türetilmiş başka bir türü kullanabileceğiniz anlamına gelir. Kovaryans ve kontravaryans hakkında daha fazla bilgi için bkz. Genel Türlerde Kovaryans ve Kontravaryans.- T2
Bu temsilcinin kapsüllediğini yönteminin ikinci parametresinin türü.
Bu genel tür parametresi kontravaryanttır. Bu, kendi belirttiğiniz türü veya daha az türetilmiş başka bir türü kullanabileceğiniz anlamına gelir. Kovaryans ve kontravaryans hakkında daha fazla bilgi için bkz. Genel Türlerde Kovaryans ve Kontravaryans.- T3
Bu temsilcinin kapsüllediğini yöntemin üçüncü parametresinin türü.
Bu genel tür parametresi kontravaryanttır. Bu, kendi belirttiğiniz türü veya daha az türetilmiş başka bir türü kullanabileceğiniz anlamına gelir. Kovaryans ve kontravaryans hakkında daha fazla bilgi için bkz. Genel Türlerde Kovaryans ve Kontravaryans.- TResult
Bu temsilcinin kapsüllediğini yöntemin dönüş değerinin türü.
Bu genel tür parametresi kovaryanttır. Bu, kendi belirttiğiniz türü veya daha fazla türetilmiş başka bir türü kullanabileceğiniz anlamına gelir. Kovaryans ve kontravaryans hakkında daha fazla bilgi için bkz. Genel Türlerde Kovaryans ve Kontravaryans.Parametreler
- arg1
- T1
Bu temsilcinin kapsüllediğini yönteminin ilk parametresi.
- arg2
- T2
Bu temsilcinin kapsüllediğini yönteminin ikinci parametresi.
- arg3
- T3
Bu temsilcinin kapsüllediğini yöntemin üçüncü parametresi.
Dönüş Değeri
- TResult
Bu temsilcinin kapsüllediğini yönteminin dönüş değeri.
Örnekler
Aşağıdaki örnekte temsilci bildirme ve kullanma Func<T1,T2,TResult> işlemleri gösterilmektedir. Bu örnek bir Func<T1,T2,TResult> değişken bildirir ve bir değeri ve bir değeri parametre olarak alan bir String Int32 lambda ifadesi atar. Lambda ifadesi, parametrenin uzunluğu parametrenin String değerine Int32 eşitse döndürürtrue
. Bu yöntemi kapsülleyen temsilci daha sonra bir sorguda bir dize dizisindeki dizeleri filtrelemek için kullanılır.
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
Açıklamalar
Özel temsilciyi açıkça bildirmeden parametre olarak geçirilebilen bir yöntemi temsil etmek için bu temsilciyi kullanabilirsiniz. Kapsüllenen yöntem, bu temsilci tarafından tanımlanan yöntem imzasına karşılık olmalıdır. Bu, kapsüllenmiş yöntemin her biri değere göre geçirilen üç parametreye sahip olması ve bir değer döndürmesi gerektiği anlamına gelir.
Not
Üç parametresi olan ve döndüren void
bir yönteme başvurmak için (unit
F#'ta) (veya Visual Basic olarak değil olarak bildirilenSub
), bunun yerine Function
genel Action<T1,T2,T3> temsilciyi kullanın.
Temsilciyi Func<T1,T2,T3,TResult> kullandığınızda, bir yöntemi üç parametreyle kapsülleyen bir temsilciyi açıkça tanımlamanız gerekmez. Örneğin, aşağıdaki kod adlı ParseNumber
genel bir temsilciyi açıkça bildirir ve yöntemine Parse temsilci örneğine bir başvuru atar.
using System;
using System.Globalization;
delegate T ParseNumber<T>(string input, NumberStyles styles,
IFormatProvider provider);
public class DelegateExample
{
public static void Main()
{
string numericString = "-1,234";
ParseNumber<int> parser = int.Parse;
Console.WriteLine(parser(numericString,
NumberStyles.Integer | NumberStyles.AllowThousands,
CultureInfo.InvariantCulture));
}
}
open System
open System.Globalization
type ParseNumber<'T> = delegate of (string * NumberStyles * IFormatProvider) -> 'T
let numericString = "-1,234"
let parser = ParseNumber<int> Int32.Parse
parser.Invoke(
numericString,
NumberStyles.Integer ||| NumberStyles.AllowThousands,
CultureInfo.InvariantCulture )
|> printfn "%i"
Imports System.Globalization
Delegate Function ParseNumber(Of T)(input As String, styles As NumberStyles, _
provider As IFormatProvider) As T
Module DelegateExample
Public Sub Main()
Dim numericString As String = "-1,234"
Dim parser As ParseNumber(Of Integer) = AddressOf Integer.Parse
Console.WriteLine(parser(numericString, _
NumberStyles.Integer Or NumberStyles.AllowThousands, _
CultureInfo.InvariantCulture))
End Sub
End Module
Aşağıdaki örnek, yeni bir temsilciyi Func<T1,T2,T3,TResult> açıkça tanımlamak ve buna adlandırılmış bir yöntem atamak yerine temsilcinin örneğini oluşturarak bu kodu basitleştirir.
using System;
using System.Globalization;
public class GenericFunc
{
public static void Main()
{
string numericString = "-1,234";
Func<string, NumberStyles, IFormatProvider, int> parser = int.Parse;
Console.WriteLine(parser(numericString,
NumberStyles.Integer | NumberStyles.AllowThousands,
CultureInfo.InvariantCulture));
}
}
open System
open System.Globalization
let parseInt (str: string) styles format = Int32.Parse(str, styles, format)
let numericString = "-1,234"
let parser =
Func<string, NumberStyles, IFormatProvider, int> parseInt
parser.Invoke(
numericString,
NumberStyles.Integer ||| NumberStyles.AllowThousands,
CultureInfo.InvariantCulture )
|> printfn "%i"
Imports System.Globalization
Module GenericFunc
Public Sub Main()
Dim numericString As String = "-1,234"
Dim parser As Func(Of String, NumberStyles, IFormatProvider, Integer) _
= AddressOf Integer.Parse
Console.WriteLine(parser(numericString, _
NumberStyles.Integer Or NumberStyles.AllowThousands, _
CultureInfo.InvariantCulture))
End Sub
End Module
Aşağıdaki örnekte gösterildiği gibi temsilciyi Func<T1,T2,T3,TResult> C# dilinde anonim yöntemlerle kullanabilirsiniz. (Anonim yöntemlere giriş için bkz . Anonim Yöntemler.)
using System;
using System.Globalization;
public class Anonymous
{
public static void Main()
{
string numericString = "-1,234";
Func<string, NumberStyles, IFormatProvider, int> parser =
delegate(string s, NumberStyles sty, IFormatProvider p)
{ return int.Parse(s, sty, p); };
Console.WriteLine(parser(numericString,
NumberStyles.Integer | NumberStyles.AllowThousands,
CultureInfo.InvariantCulture));
}
}
Aşağıdaki örnekte gösterildiği gibi bir temsilciye lambda Func<T1,T2,T3,TResult> ifadesi de atayabilirsiniz. (Lambda ifadelerine giriş için bkz . Lambda İfadeleri (VB), Lambda İfadeleri (C#) ve Lambda İfadeleri (F#).)
using System;
using System.Globalization;
public class LambdaExpression
{
public static void Main()
{
string numericString = "-1,234";
Func<string, NumberStyles, IFormatProvider, int> parser = (s, sty, p)
=> int.Parse(s, sty, p);
Console.WriteLine(parser(numericString,
NumberStyles.Integer | NumberStyles.AllowThousands,
CultureInfo.InvariantCulture));
}
}
open System
open System.Globalization
let numericString = "-1,234"
let parser = Func<string, NumberStyles, IFormatProvider, int>(fun s sty p ->
Int32.Parse(s, sty, p))
parser.Invoke(numericString,
NumberStyles.Integer ||| NumberStyles.AllowThousands,
CultureInfo.InvariantCulture)
|> printfn "%i"
Imports System.Globalization
Module LambdaExpression
Public Sub Main()
Dim numericString As String = "-1,234"
Dim parser As Func(Of String, NumberStyles, IFormatProvider, Integer) _
= Function(s, sty, p) Integer.Parse(s, sty, p)
Console.WriteLine(parser(numericString, _
NumberStyles.Integer Or NumberStyles.AllowThousands, _
CultureInfo.InvariantCulture))
End Sub
End Module
Lambda ifadesinin temel türü genel Func
temsilcilerden biridir. Bu, bir lambda ifadesini bir temsilciye açıkça atamadan parametre olarak geçirmeyi mümkün kılar. Özellikle, ad alanında System.Linq Func
birçok tür yönteminin parametreleri olduğundan, bu yöntemleri açıkça bir temsilci örneği oluşturmadan bir Func
lambda ifadesi geçirebilirsiniz.
Uzantı Metotları
GetMethodInfo(Delegate) |
Belirtilen temsilci tarafından temsil edilen yöntemi temsil eden bir nesnesi alır. |