اگر ویژگی nullable reference types را فعال کرده باشید، هنگام تعریف متغییرها یا property هایی از نوع reference types، حتما باید مشخص کنید که آیا متغییرهای شما nullable reference type هستند یا خیر.
اگر متغییر ما از نوع nullable باشد، مشکلی وجود ندارد و با چالشی که قرار است در مورد آن صحبت کنیم مواجه نمیشویم.
اما اگر همین متغییر nullable نبود، شما مجبور بودید به یک نحوی مقدار اولیه را در هر شرایطی به این متغییر بدهید.
راه حل اول: استفاده از مقدار پیشفرض برای property
ولی این راه حل یک راه حل جامع نیست. راه حل جامع و همه گیر، استفاده از سازنده کلاس است.
راه حل دوم راه حل درستی است ولی شما همه property ها را باید در سازنده کلاس initialize کنید. در این حالت شما هر موقع قصد داشتید از کلاس Person استفاده کنید مجبور هستید از این constructor استفاده کنید.
راه حل رهایی از این مشکلات، استفاده از کلمه کلیدی required است.
در این حالت اگر جایی بخواهیم از کلاس Teacher یک نمونه بگیریم، حتما باید به صورت object initializer از آن استفاده کنیم و مقدار Name را به آن بدهیم، در غیر اینصورت با خطای زیر مواجه میشویم.
و بدین شکل خطا از بین میرود.
در مثال بالا اگر شما یک سازنده داشته باشید و بخواهید از طریق آن مقدار Name را پر کنید چه اتفاقی رخ میدهد؟
باز هم با همان خطای قبلی مواجه میشویم!
برای حل این مشکل میتوان از اتربیوت SetsRequiredMembers بالای سازنده (مورد نظر) خود استفاده کرد.