İngilizce dilinde oku

Aracılığıyla paylaş


Action<T> Temsilci

Tanım

Tek bir parametreye sahip olan ve değer döndürmeyen bir yöntemi kapsüller.

C#
public delegate void Action<in T>(T obj);
C#
public delegate void Action<T>(T obj);

Tür Parametreleri

T

Bu temsilcinin kapsüllediğini yöntemin 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.

Parametreler

obj
T

Bu temsilcinin kapsüllediğini yönteminin parametresi.

Örnekler

Aşağıdaki örnekte, bir List<T> nesnenin Action<T> içeriğini yazdırmak için temsilcinin kullanımı gösterilmektedir. Bu örnekte yöntemi, listenin Print içeriğini konsolda görüntülemek için kullanılır. Ayrıca C# örneği, içeriği konsolda görüntülemek için anonim yöntemlerin kullanımını da gösterir. Örneğin bir Action<T> değişkeni açıkça bildirmediğini unutmayın. Bunun yerine, tek bir parametre alan ve tek parametresi temsilci olan yönteme değer döndürmeyen bir Action<T> yönteme List<T>.ForEach başvuru geçirir. Benzer şekilde, C# örneğinde, Action<T> anonim yöntemin imzası yöntemi tarafından List<T>.ForEach beklenen temsilcinin imzası Action<T> ile eşleştiğinden temsilci açıkça örneklenmez.

C#
List<string> names = new List<string>();
names.Add("Bruce");
names.Add("Alfred");
names.Add("Tim");
names.Add("Richard");

// Display the contents of the list using the Print method.
names.ForEach(Print);

// The following demonstrates the anonymous method feature of C#
// to display the contents of the list to the console.
names.ForEach(delegate(string name)
{
    Console.WriteLine(name);
});

void Print(string s)
{
    Console.WriteLine(s);
}

/* This code will produce output similar to the following:
* Bruce
* Alfred
* Tim
* Richard
* Bruce
* Alfred
* Tim
* Richard
*/

Açıklamalar

Özel temsilciyi Action<T> açıkça bildirmeden bir yöntemi parametre olarak geçirmek için 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 değere göre geçirilen tek bir parametreye sahip olması ve değer döndürmemesi gerektiği anlamına gelir. (C# dilinde yöntemi döndürmelidirvoid. Visual Basic'te ,...End Sub yapısı tarafından Subtanımlanmalıdır. Yoksayılan bir değer döndüren bir yöntem de olabilir.) Genellikle, böyle bir yöntem bir işlemi gerçekleştirmek için kullanılır.

Not

Bir parametresi olan ve değer döndüren bir yönteme başvurmak için bunun yerine genel Func<T,TResult> temsilciyi kullanın.

Temsilciyi Action<T> kullandığınızda, bir yöntemi tek bir parametreyle kapsülleyen bir temsilciyi açıkça tanımlamanız gerekmez. Örneğin, aşağıdaki kod adlı DisplayMessage bir temsilciyi açıkça bildirir ve yöntemine veya ShowWindowsMessage yöntemine WriteLine temsilci örneğine bir başvuru atar.

C#
using System;
using System.Windows.Forms;

delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
   public static void Main()
   {
      DisplayMessage messageTarget;

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);
   }
}

Aşağıdaki örnek, yeni bir temsilciyi açıkça tanımlamak ve buna adlandırılmış bir yöntem atamak yerine temsilcinin Action<T> örneğini oluşturarak bu kodu basitleştirir.

C#
using System;
using System.Windows.Forms;

public class TestAction1
{
   public static void Main()
   {
      Action<string> messageTarget;

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);
   }
}

Aşağıdaki örnekte gösterildiği gibi temsilciyi Action<T> C# dilinde anonim yöntemlerle de kullanabilirsiniz. (Anonim yöntemlere giriş için bkz . Anonim Yöntemler.)

C#
using System;
using System.Windows.Forms;

public class TestAnonMethod
{
   public static void Main()
   {
      Action<string> messageTarget;

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = delegate(string s) { ShowWindowsMessage(s); };
      else
         messageTarget = delegate(string s) { Console.WriteLine(s); };

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);
   }
}

Aşağıdaki örnekte gösterildiği gibi temsilci örneğe lambda Action<T> ifadesi de atayabilirsiniz. (Lambda ifadelerine giriş için bkz. Lambda İfadeleri.)

C#
using System;
using System.Windows.Forms;

public class TestLambdaExpression
{
   public static void Main()
   {
      Action<string> messageTarget;

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = s => ShowWindowsMessage(s);
      else
         messageTarget = s => Console.WriteLine(s);

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);
   }
}

ve ForEach yöntemlerinin ForEach her biri parametre olarak bir Action<T> temsilci alır. Temsilci tarafından kapsüllenen yöntemi, dizideki veya listedeki her öğe üzerinde bir eylem gerçekleştirmenizi sağlar. Örnek, bir çizim sağlamak için yöntemini kullanır ForEach .

Uzantı Metotları

GetMethodInfo(Delegate)

Belirtilen temsilci tarafından temsil edilen yöntemi temsil eden bir nesnesi alır.

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Ayrıca bkz.