/// <summary>
        /// The Lockamitha OpenSafe method picks the lock,
        /// opens the safe, and then calls ReturnContents
        /// to get the valuables safely back to the owner.
        /// </summary>
        /// <param name="safe"></param>
        /// <param name="owner"></param>
        public void OpenSafe(Safe safe, SafeOwner owner)
        {
            safe.PickLock(this);
            string safeContents = safe.Open(Combination);

            ReturnContents(safeContents, owner);
        }
        static void Main(string[] args)
        {
            SafeOwner  owner      = new SafeOwner();
            Safe       safe       = new Safe();
            JewelThief jewelThief = new JewelThief();

            jewelThief.OpenSafe(safe, owner);
            Console.ReadKey(true);
        }
 protected virtual void ReturnContents(string safeContents, SafeOwner owner)
 {
     owner.ReceiveContents(safeContents);
 }
 /// <summary>
 /// JewelThief extends Locsmith and inherits
 /// the OpenSafe method and Combination
 /// property, but its ReturnContents method
 /// steals the jewels instead of returning them.
 /// </summary>
 /// <param name="safeContents"></param>
 /// <param name="owner"></param>
 protected override void ReturnContents(string safeContents, SafeOwner owner)
 {
     stolenJewels = safeContents;
     Console.WriteLine($"I'm stealing the jewels! I stole: {stolenJewels}");
 }