title: Process is Terminated due to StackOverFlowException C#
body: <p>This is my code. I am not able to figure out why this code is giving 'Process is Terminated due to StackOverFlowException'.</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using System.Threading.Tasks;
  
  namespace SadiSDAL4
  {
      class Program
      {
          static void Main(string[] args)
          {
              PrivateVehical privateV = new PrivateVehical("001");
              PrivateVehical pVehical = (PrivateVehical)privateV.Clone();
              Console.WriteLine("Cloned : {0}", privateV.name);
              Console.WriteLine("Cloned : {0}", pVehical.name);
              privateV.name = "Sadia's Car";
              Console.WriteLine("Cloned : {0}", privateV.name);
              Console.WriteLine("Cloned : {0}", pVehical.name);
              pVehical.name = "Waheed's Car";
              Console.WriteLine("Cloned : {0}", privateV.name);
              Console.WriteLine("Cloned : {0}", pVehical.name);
              Console.WriteLine(privateV.GetHashCode().ToString());
              Console.WriteLine(pVehical.GetHashCode().ToString());
              PublicVehical publicV = new PublicVehical("002");
              Console.WriteLine(publicV.id);
              PublicVehical pubVehi = (PublicVehical)publicV.Clone();
              Console.WriteLine("Cloned : {0}", pubVehi.id);
          }
      }
      abstract class Vehical
      {
          private string vehicalId = "01";
          public string name = "Car_1";
          public Vehical(string id)
          {
              this.vehicalId = id;
          }
          public string id
          {
              get { return id; }
              set { this.vehicalId = id; }
          }
          public abstract Vehical Clone();
      }
      class PrivateVehical : Vehical
      {
          public PrivateVehical(string id)
              : base(id)
          {
  
          }
          public override Vehical Clone()
          {
              return (Vehical)this.MemberwiseClone();
          }
      }
      class PublicVehical : Vehical
      {
          public PublicVehical(string id)
              : base(id)
          {
  
          }
          public override Vehical Clone()
          {
              return (Vehical)this.MemberwiseClone();
          }
      }
  }
  </code></pre>
  
  <p>This is the output. 
  <img src="https://i.stack.imgur.com/3gCUT.png" alt="enter image description here">
  Can someone explain what is the cause of it ? Why it is working in first part &amp; not in the other ?</p>