134 Stimmen

Verwendungen von Action delegate in C#

Ich habe mit den Action Delegates in C# gearbeitet, in der Hoffnung, mehr über sie zu erfahren und zu überlegen, wo sie nützlich sein könnten.

Hat jemand den Action Delegate verwendet, und wenn ja, warum? oder könnten Sie einige Beispiele nennen, wo er nützlich sein könnte?

13voto

Binary Worrier Punkte 49250

Ein Beispiel dafür, wie Action<> verwendet wird.

Console.WriteLine hat eine Signatur, die folgende Bedingungen erfüllt Action<string> .

    static void Main(string[] args)
    {
        string[] words = "This is as easy as it looks".Split(' ');

        // Passing WriteLine as the action
        Array.ForEach(words, Console.WriteLine);         
    }

Ich hoffe, das hilft

11voto

Ron Skufca Punkte 1988

Ich verwende es, wenn ich zum Beispiel mit unzulässigen Cross-Thread-Aufrufen zu tun habe:

DataRow dr = GetRow();
this.Invoke(new Action(() => {
   txtFname.Text = dr["Fname"].ToString();
   txtLname.Text = dr["Lname"].ToString(); 
   txtMI.Text = dr["MI"].ToString();
   txtSSN.Text = dr["SSN"].ToString();
   txtSSN.ButtonsRight["OpenDialog"].Visible = true;
   txtSSN.ButtonsRight["ListSSN"].Visible = true;
   txtSSN.Focus();
}));

Ich muss Reed Copsey SO Benutzer 65358 für die Lösung danken. Meine vollständige Frage mit Antworten lautet SO Frage 2587930

3voto

Sorskoot Punkte 10066

Ich habe es als Callback in einem Event-Handler verwendet. Wenn ich das Ereignis auslöse, übergebe ich eine Methode mit einem String als Parameter. So sieht das Auslösen des Ereignisses aus:

SpecialRequest(this,
    new BalieEventArgs 
    { 
            Message = "A Message", 
            Action = UpdateMethod, 
            Data = someDataObject 
    });

Die Methode:

   public void UpdateMethod(string SpecialCode){ }

Das ist die Klassendeklaration des Ereignisses Args:

public class MyEventArgs : EventArgs
    {
        public string Message;
        public object Data;
        public Action<String> Action;
    }

Auf diese Weise kann ich die vom Event-Handler übergebene Methode mit einem bestimmten Parameter aufrufen, um die Daten zu aktualisieren. Ich verwende dies, um einige Informationen vom Benutzer anzufordern.

2voto

evilone Punkte 21922

Wir verwenden eine Menge Action-Delegate-Funktionen in Tests. Wenn wir ein Standardobjekt erstellen müssen und es später ändern wollen. Ich habe ein kleines Beispiel gemacht. Um das Standardobjekt Person (John Doe) zu erstellen, verwenden wir BuildPerson() Funktion. Später fügen wir auch Jane Doe hinzu, aber wir ändern ihr Geburtsdatum, ihren Namen und ihre Größe.

public class Program
{
        public static void Main(string[] args)
        {
            var person1 = BuildPerson();

            Console.WriteLine(person1.Firstname);
            Console.WriteLine(person1.Lastname);
            Console.WriteLine(person1.BirthDate);
            Console.WriteLine(person1.Height);

            var person2 = BuildPerson(p =>
            {
                p.Firstname = "Jane";
                p.BirthDate = DateTime.Today;
                p.Height = 1.76;
            });

            Console.WriteLine(person2.Firstname);
            Console.WriteLine(person2.Lastname);
            Console.WriteLine(person2.BirthDate);
            Console.WriteLine(person2.Height);

            Console.Read();
        }

        public static Person BuildPerson(Action<Person> overrideAction = null)
        {
            var person = new Person()
            {
                Firstname = "John",
                Lastname = "Doe",
                BirthDate = new DateTime(2012, 2, 2)
            };

            if (overrideAction != null)
                overrideAction(person);

            return person;
        }
    }

    public class Person
    {
        public string Firstname { get; set; }
        public string Lastname { get; set; }
        public DateTime BirthDate { get; set; }
        public double Height { get; set; }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X