static void Main(string[] args) { var moviePlayer = new MoviePlayer { CurrentMovie = Movie.StarWars4 }; MoviePlayer.MovieFinishedHandler handler = EjectDisc; // subscribe to an event moviePlayer.MovieFinished += handler; // unsubscribe // moviePlayer.MovieFinished -= handler; // will make it so we don't eject disk moviePlayer.MovieFinished += EjectDisc; moviePlayer.MovieFinished += () => { Console.WriteLine("handle event with block body lambda"); }; moviePlayer.MovieFinished += () => Console.WriteLine("expression body"); //Type is usually inferred from context so (string s) is unnecessary moviePlayer.DiscEjected += (string s) => Console.WriteLine($"Ejecting {s}"); moviePlayer.Play(); Console.ReadLine(); // will wait for me to press enter before exiting }
static void Main(string[] args) { var moviePlayer = new MoviePlayer { CurrentMovie = Movie.StarWars4 }; MoviePlayer.MovieFinishedHandler handler = EjectDisc; // subscribe to an event moviePlayer.MovieFinished += handler; // unsubscribe to an event //moviePlayer.MovieFinished -= handler; moviePlayer.MovieFinished += EjectDisc; moviePlayer.MovieFinished += () => { Console.WriteLine("handle event with block-body lambda."); }; // with expression body, you can only put one line in moviePlayer.MovieFinished += () => Console.WriteLine("expression body"); moviePlayer.DiscEjected += s => Console.WriteLine($"Ejecting {s}"); Console.WriteLine("Playing movie..."); moviePlayer.Play(); Console.ReadLine(); }
static void Main(String[] args) { var moviePlayer = new MoviePlayer { CurrentMovie = Movie.StarWars4 }; MoviePlayer.MovieFinishedHandler handler = EjectDisc; //subscribe to an event moviePlayer.MovieFinished += handler; moviePlayer.MovieFinished += EjectDisc; //unsubscribe // moviePlayer.MovieFinished -= handler; moviePlayer.MovieFinished += () => { // can do anything inside a lambda Console.WriteLine("handle event with block body"); }; // with expression body, you can only put one line in moviePlayer.MovieFinished += () => Console.WriteLine("expression body"); // we can specify type on lamda function params // but usually they are inferred from context like var //moviePlayer.DiscEjected += (string s) => Console.WriteLine($"Ejecting {s}"); moviePlayer.DiscEjected += s => Console.WriteLine($"Ejecting {s}"); Console.WriteLine("Playing movie...."); moviePlayer.Play(); }
static void Main(string[] args) { var moviePlayer = new MoviePlayer(); { Movies CurrentMovie = Movies.StarWars4; } moviePlayer.Play(); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); var player = new MoviePlayer { CurrentMovie = new Movie { Title = "The Lion King", ReleaseDate = new DateTime(2019, 7, 19) } }; // we are treating methods as just another form of data // that can be in variables etc. MoviePlayer.MovieEndHandlerNoParam handler = AnnounceEndOfMovie; MoviePlayer.MovieEndHandlerWithTitle handler2 = AnnounceEndOfMovieByName; Action <string> handler3 = AnnounceEndOfMovieByName; // instead of declaring methods, i can use lambda expressions // to create functions in-line Action <string> handler4 = title => Console.WriteLine(title); Func <int, int, int> add = (a, b) => a + b; bool x = add(3, 4) == 7; // lambda expressions also allow "block body" like regular methods. Func <string, int> printLength = value => { Console.WriteLine(value.Length); return(value.Length); }; // subscribe to events with += player.MovieEnd += handler4; player.MovieEnd += (title) => Console.WriteLine($"{title} is over from lambda."); //player.MovieEnd += handler2; //player.MovieEnd += handler2; //player.MovieEnd -= handler2; // unsubscribe with -= player.Play(); Linq(); }
static void Main(string[] args) { var moviePlayer = new MoviePlayer { CurrentMovie = Movie.StarWars4 }; MoviePlayer.MovieFinishedHandler handler = EjectDisc; // subscribe to an event moviePlayer.MovieFinished += handler; // unsubscribe from an event //moviePlayer.MovieFinished -= handler; moviePlayer.MovieFinished += EjectDisc; moviePlayer.MovieFinished += () => { //for (int i = 0; i < length; i++) //{ //} //if () // if () Console.WriteLine("handle event with block-body lambda."); }; // with expression body, you can only put one line in moviePlayer.MovieFinished += () => Console.WriteLine("expression body"); // we can specify type on lambda function parameters... // but usually, they are inferred from context (like "var" does). //moviePlayer.DiscEjected += (string s) => Console.WriteLine($"Ejecting {s}"); moviePlayer.DiscEjected += s => Console.WriteLine($"Ejecting {s}"); FuncAndAction(); Console.WriteLine("Playing movie..."); moviePlayer.Play(); Console.ReadLine(); // wait for me to press enter before exiting }
static void Main(string[] args) { //var movie = new Movie(); //movie.Name = "Infinity War"; var movie = new Movie { Name = "Infinity War" }; var moviePlayer = new MoviePlayer() { CurrentMovie = movie }; // subscribe to the event: // first we need a function / method that should run // when the event occurs. // for the variable, the method itself is the value. // the type is, the delegate type defined in MoviePlayer. MoviePlayer.PlayFinishedHandler handler = EjectDisc; MoviePlayer.PlayFinishedHandlerWithName handler2 = EjectDisc; // subscribe to the event with += // (why +=? because we are adding one function to a list of // other subscribing functions) //moviePlayer.PlayFinished += handler2; Action <string> handler3 = EjectDisc; moviePlayer.PlayFinished += handler3; Action <string> handler4 = name => { Console.WriteLine("Handling with lambda expression"); }; moviePlayer.PlayFinished += handler4; //moviePlayer.PlayFinished -= handler; // unsubscribe moviePlayer.Play(); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); var player = new MoviePlayer { Currentmovie = new Movie { Title = "The Lion King", ReleaseDate = new DateTime(2019, 7, 19) } }; //we are treating methods as just another form of data //that can be in variables etc. MoviePlayer.MovieEndHandlerNoParam handler = AnnounceEndOfMovie; MoviePlayer.MovieEndHandlerWithTitle handler2 = AnnounceEndOfMovieByName; Action <string> handler3 = AnnounceEndOfMovieByName; Action <string> handler4 = (title) => Console.WriteLine(title); Func <int, int, int> add = (a, b) => a + b; bool x = add(3, 4) == 7; Func <string, int> printLength = value => { Console.WriteLine(value.Length); return(value.Length); }; //subscribe with += player.MovieEnd += handler2; //unsubscribe with -= player.MovieEnd -= handler2; player.MovieEnd += (title) => Console.WriteLine($"(title) is over from lambda"); player.Play(); }
static void Main(string[] args) { var moviePlayer = new MoviePlayer() { CurrentMovie = Movie.StarWars5 }; MoviePlayer.MovieFinishedHandler handler = EjectDisk; moviePlayer.MovieFinished += handler; Console.WriteLine("playing movie"); moviePlayer.Play(); moviePlayer.MovieFinished += () => { Console.WriteLine("Lambda expression"); }; }
public static void Main(string[] args) { var moviePlayer = new MoviePlayer { CurrentMovie = Movie.StarWars4 }; MoviePlayer.MovieFinishedHandler handler = EjectDisc; // subscribe to an event moviePlayer.MovieFinished += handler; // unsubscribe to an event // moviePlayer.MovieFinished -= handler; moviePlayer.MovieFinished += () => { Console.WriteLine("handle event with block-body lambda."); }; moviePlayer.MovieFinished += () => Console.WriteLine("Expression body"); //we can specify type on lambda funtion parameters // but usually they are inferred from context (like var does) moviePlayer.DiscEjected += s => Console.WriteLine($"Ejecting {s}"); FuncAndAction(); Console.WriteLine("Playing movie..."); moviePlayer.Play(); // wait for me to press enter before exiting Console.ReadLine(); }