no image
What is Clone ?
It look like duplicate of original
Reference is same for string
And different for objects
Once clone create it acts as independent 


class SiteName : Icloneable
    {

        private string SiteDomain { get; }
        private string Protocal { get; }

        public SiteName(SiteName siteName)
        {
            this.Protocal = siteName.Protocal;
            this.SiteDomain = siteName.SiteDomain;
        }

        public SiteName(string SiteName)
        {
            SiteDomain = SiteName.Split('.')[2];
            Protocal = SiteName.Split('/').FirstOrDefault();
        }

        public string showData
        {
            get { return $"Domain={SiteDomain} Protocal={Protocal}"; }
        }
           
        public object Clone()
        {
//Runtime exception : System.StackOverflowException  HResult=0x800703E9
//  Message=Exception of type 'System.StackOverflowException' was thrown.
            //return Clone();

// This will run as expected
            //return this.MemberwiseClone();

//Runtime exception : System.InvalidCastException
//Message=Unable to cast object of type 'System.String' to type 'Clone_Concept.SiteName'.
            //return showData;

            //return this.Clone();
            return MemberwiseClone();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //string clone
            string Site1Name = "http://www.abc.com";
            Console.WriteLine(Site1Name);
           
            string Site2Name = (string)Site1Name.Clone();
            Console.WriteLine(
                $"Reference {object.ReferenceEquals(Site1Name, Site2Name)}" +
                $"\n Is Equal {object.Equals(Site1Name,Site2Name)}");
            Console.WriteLine();
           
            //Object Clone
            SiteName siteNameObj1 = new SiteName(Site1Name);
            Console.WriteLine(siteNameObj1.showData);
           
            SiteName siteNameObj2 = (SiteName)siteNameObj1.Clone();
            Console.WriteLine(
                $"Reference {object.ReferenceEquals(siteNameObj1, siteNameObj2)}" +
                $"\n Is Equal {object.Equals(siteNameObj1, siteNameObj2)}");

            Console.Read();
        }
    }

no image



class Coffee
    {
        private string BoilWater;
        private string CoffeePowder;       
        private string Sugar;
        public bool IsCoffeeReady = false;
        public Coffee(string boilWater, string coffeePowder, string sugar)
        {
            Console.WriteLine("Start Coffee making");
            BoilWater = boilWater;
            Console.WriteLine("Start boiling water");
            Thread.Sleep(1000);
            Console.WriteLine("water boiled add coffee");
            CoffeePowder = coffeePowder;
            Console.WriteLine("Ster and boild");
            Thread.Sleep(500);
            Console.WriteLine("Add sugar");
            Sugar = sugar;
            Console.WriteLine("coffee ready");
            IsCoffeeReady = true;
        }
        public void PourCoffee()
        {
            if(IsCoffeeReady)
                Console.WriteLine("Coffee Ready for pour");
        }
    }

    class Egg
    {
        private string boilWater;

        public Egg(int eggcount)
        {
            //add egg into water and start boiling water
            Console.WriteLine($"put {eggcount} egg into the water");
            Console.WriteLine("water is boiling now");
            Thread.Sleep(1500);
            Console.WriteLine("egg are boiled");
            Console.WriteLine("pealing the egg");
            Thread.Sleep(1000);
            Console.WriteLine("Egg is ready");
        }
    }

    class Toast
    {
        private int Breadcount;
        public Toast(int breadcount)
        {
            Breadcount = breadcount;
            Console.WriteLine($"Put {Breadcount} bread slice into toster");
            Console.WriteLine("Tostes are making");
            Thread.Sleep(1500);
            Console.WriteLine("Toste are ready ");
        }

        public void ApplyButter(Toast tos)
        {
            Console.WriteLine($"Appling butter on {tos.Breadcount} tostes");
            Thread.Sleep(1000);
            Console.WriteLine($"{tos.Breadcount} tostes are ready with butter");
        }

        public void ApplyJam(Toast tos)
        {
            Console.WriteLine($"Appling Jam on {tos.Breadcount} toastes");
            Thread.Sleep(1000);
            Console.WriteLine($"{tos.Breadcount} tostes are ready with jam");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Coffee cup =new Coffee("Water", "Coffee", "Sugar");
            Console.WriteLine("coffee is ready");
            Egg eggs = new Egg(2);
            Console.WriteLine("eggs are ready");
         
            Toast toast = new Toast(2);
            toast.ApplyButter(toast);
            toast.ApplyJam(toast);
            Console.WriteLine("toast is ready");
           
            Console.WriteLine("Breakfast is ready!");
            Console.Read();
        }
    }


public class Coffee
    {
        public bool IsCoffeeReady = false;
        public Coffee(int cups)
        {
            Console.WriteLine("Coffee :Start Coffee making");

            Console.WriteLine("Coffee :Start boiling water for coffee......");
            Thread.Sleep(10000);
            Console.WriteLine("Coffee :water boiled add coffee powder ");

            Console.WriteLine("Coffee :Ster and boil");
            Thread.Sleep(500);
            Console.WriteLine("Coffee :Add sugar");
            Thread.Sleep(500);
            Console.WriteLine($"Coffee :{cups} cups coffee ready");
            IsCoffeeReady = true;
        }
        public void PourCoffee()
        {
            Console.WriteLine("Coffee : Coffee Ready for pour");
        }
    }

    class Egg
    {
        public Egg(int eggcount)
        {
            Console.WriteLine($"Egg: put {eggcount} egg into the water");
            Console.WriteLine("Egg: water is boiling .....");
            Thread.Sleep(1500);
            Console.WriteLine("Egg: egg are boiled");
            Console.WriteLine("Egg: pealing the egg");
            Thread.Sleep(1000);
            Console.WriteLine("Egg: Egg is ready");
        }
    }

    class Toast
    {
        private int Breadcount;
        public Toast(int breadcount)
        {
            Breadcount = breadcount;
            Console.WriteLine($"Toast : Put {Breadcount} bread slice into toaster");
            Console.WriteLine("Toast : bread are processing .....");
            Thread.Sleep(15000);
            Console.WriteLine("Toast :Toste are ready ");
        }

        public void ApplyButter(Toast tos)
        {
            Console.WriteLine($"Butter On Toast :Appling butter on {tos.Breadcount} tostes.....");
            Thread.Sleep(12000);
            Console.WriteLine($"Butter On Toast :{tos.Breadcount} tostes are ready with butter");
        }

        public void ApplyJam(Toast tos)
        {
            Console.WriteLine($"Jam on Toast : Appling Jam on {tos.Breadcount} toastes......");
            Thread.Sleep(100);
            Console.WriteLine($"Jam on Toast : {tos.Breadcount} tostes are ready with jam");
        }
    }

   

    class Program
    {
        public static int MakeCoffee()
        {
            int cup = 2;
            Coffee coffee = new Coffee(cup);
            coffee.PourCoffee();
            return cup;
        }

        public static int MakeEggs()
        {
            int numberofeggs = 2;
            Egg egg = new Egg(numberofeggs);
            return numberofeggs;
        }

        public static int MakeToast()
        {
            int breadcount = 2;
            Toast toast = new Toast(breadcount);
            toast.ApplyButter(toast);
            toast.ApplyJam(toast);
            return breadcount;
        }
        //static async Task<Toast> MakeToastAsync()
        //{
        //    int breadcount = 2;
        //    Toast toast = new Toast(breadcount);           
        //    toast.ApplyButter(toast);
        //    toast.ApplyJam(toast);           
        //    return toast;
        //}
        public static async void CallTaskmethods()
        {
            Console.WriteLine("## Group Task Asynchonously ##");

            Task<int> coffeeTask = new Task<int>(MakeCoffee);
            coffeeTask.Start();
            //Console.WriteLine("Start coffee making");
            //int counts = await coffeeTask;
            //Console.WriteLine("Coffee task completed");
            //Console.WriteLine();

            Task<int> eggTask = new Task<int>(MakeEggs);
            eggTask.Start();
            //Console.WriteLine("Egg task Start");
            //counts = await eggTask;
            //Console.WriteLine("Egg task completed");
            //Console.WriteLine();

            Task<int> toastTask = new Task<int>(MakeToast);
            toastTask.Start();
            //var toastTask = MakeToastAsync();
            Console.WriteLine();

            var alltask = new List<Task> { coffeeTask, eggTask, toastTask };
            while (alltask.Any())
            {
                Task finished = await Task.WhenAny(alltask);
                if (finished == coffeeTask)
                {
                    Console.WriteLine("#### Coffee Task Completed");
                    alltask.Remove(coffeeTask);
                    var coffe = await coffeeTask;
                }
                else if (finished == eggTask)
                {
                    Console.WriteLine("#### Egg Task Completed");
                    alltask.Remove(eggTask);
                    var eggs = await eggTask;                   
                }
                else if (finished == toastTask)
                {
                    Console.WriteLine("#### Toast Task Completed");
                    alltask.Remove(toastTask);
                    var toasts = await toastTask;
                }
                else
                    alltask.Remove(finished);
            }
            Console.WriteLine("####Break-Fast is ready ");
        }

        static void Main(string[] args)
        {
            CallTaskmethods();
            Console.Read();
        }
    }

sblog4u. Powered by Blogger.

Topics

Real World Programming Concept in 2 mins

Clone

What is Clone ? It look like duplicate of original Reference is same for string And different for objects Once clone crea...