using System.Collections.Generic;
public static void Main(string[] args)
Console.WriteLine("Good morning.");
Console.WriteLine("The objects are initialized after this line.");
var phones = GetPhones();
Console.WriteLine("The SMS message from the 11th youngest owner is below.");
var phoneEleventh = phones.OrderBy(x => x.OwnerBirthdate).ElementAt(11);
phoneEleventh.SendSms("This is from item 7");
Console.WriteLine("The SMS messages from all 20 items are below.");
var phonesSorted = phones.OrderByDescending(x => x.OwnerBirthdate).ToList();
for (var i = 0; i < 20; i++)
phonesSorted.ElementAt(i).SendSms("This is from item 9");
Console.WriteLine("The SMS messages from the remaining 10 items are below.");
for (var i = 2; i <= 20; i += 2)
phonesSorted.RemoveAt(i);
foreach(var item in phonesSorted)
item.SendSms("This is from item 10");
Console.WriteLine("The objects are disposed after this line.");
Console.WriteLine("Thank you.");
public static List<SmartPhone> GetPhones()
var phones = new List<SmartPhone>(20);
for (var i = 0; i < 10; i++)
phones.Add(new AndroidPhone
OwnerBirthdate = DateTime.Now
OwnerBirthdate = DateTime.Now
public abstract class SmartPhone : IDisposable
protected string _phoneType;
_phoneType = "Smart Phone";
public Guid Id { get; private set; }
public string OwnerUserName { get; set; }
public DateTime OwnerBirthdate { get; set; }
public virtual void SendSms(string message)
Console.WriteLine(message);
Console.WriteLine("Sent from my {0}.", _phoneType);
public class AndroidPhone : SmartPhone
public override void SendSms(string message)
Console.WriteLine("Owner's Name: " + OwnerUserName + ", Owner's Birthdate: " + OwnerBirthdate);
public class IosPhone : SmartPhone
public override void SendSms(string message)
Console.WriteLine("Owner's Name: " + OwnerUserName + ", Owner's Birthdate: " + OwnerBirthdate);