به صورت ساده داستان اینه که قبلا حتما باید واسه get مقدار بازگشتی رو تایپ میکردید مثلا return var و همچنین واسه set مقدار ورودی رو که value بود رو به متغیر میدادید مثلا var = value که اگه مثلا نیاز بود 10 تا property تعریف کنید کلی باید تایپ میکردید. با automatic property این کار خودکار خودش انجام میشه و شما دیگه نیازی به نوشتن اون کدها ندارید.
در خصوص اون متغیرهای مخفی منظورش این هست که وقتی مثلا این propery رو تعریف میکنید public string Name{get; set;}f (من اون f آخر و نوشتن که ساختار درست بیاد اون و ندید بگیرید. ) شما در اصل هیچ مقداری به متغیر Name ندادید ولی کامپایلر به صورت خودکار مقدار پیش فرض string یعنی "" را برای اون در نظر میگیره. یا اگه int تعریف کرده باشید مقدار پیش فرض int مساوی 0 هست و کامپایلر به صورت خودکار مقدار 0 رو به مثلا public int age{get;set;}f متغیر age میده تا قبل از اینکه مقداری بهش بدیم. حالا اگه یه کلاس رو به صورت property تعریف کرده باشیم چون مقدار پیش فرض کلاسها برابر null هست مقدار پیش فرض public yourClass ClassName{get; set;}f متغیر ClassName برابر null خواهد بود. این کل داستان بود.