هنوز چند بایت مونده که پیدا کنم...

پیشرفت های حاشیه نویسی برای تهی پذیری در دات نت 5

.NET Core 5.0 Nullability annotation improvements

منظور از حاشیه نویسی همون annotation هست تو این متن.

در حال حاضر، کتابخونه های دات نت کاملا برای تهی پذیری حاشیه نویسی شدن. یعنی اگر تهی پذیری رو فعال کنید از پلتفرم اطلاعات بیشتری در مورد نوع داده میگیرید.

البته الآن هنوز مستندات دات نت به طور کامل حاشیه نویسی نشدن. مثلاً String.IsNullOrEmpty(string)، باید برای گرفتن ?string حاشیه نویسی لازم رو انجام بده؛ درحالی که String.Split(Char[])، حاشیه نویسی مربوط به ?[]char رو داره. اطلاعات کامل راجع به این قسمت هم در سورس کد دات نت، از طریق جست و جوی ابرداده (متا دیتا) با F12 در جستجوی ویژوال استودیو، در دسترسه.

بسته (پکیج) های System.Device.Gpio و lot.Device.Bindings (نسخه 1.1.0)هم به عنوان بخشی از این انتشار (ریلیس)، با استفاده از حاشیه نویسی های به روز شده دات نت 5 مستند شدند. کتابخونه های این دو بسته ای که گفتیم، چند نسخه ای (multi-targeted) هستن در حالی که از نسخه 5 برای تهیه ی حاشیه نویسی تمام نسخه ها استفاده شده.

توجه داشته باشین که: اگر تهی پذیری رو فعال کرده باشید کد دات نت کور 3.1 ممکنه تشخیص های جدیدی بده وقتی میخواین  دات نت 5 رو مجددا هدف گذاری کنید.
  • اینجا هدف گذاری یا همون Target کردن فریم منظور انتخاب نسخه یا ورژن فریم ورک هست. پس خیلی گیج نشین از این زور فارسی نویسی :)
تیم دات نت اومده انواع جدید حاشیه نویسی رو هم اضافه کرده. که البته برای کلاس های بزرگ خیلی رایجه تا بتونن داخل متدهای کمکی (Helper Methods) که از سازنده (Constructor) نمونه سازی اشیا عضو (Object Members) رو انجام بدن.

کامپایلر C# نمیتونه جریان فراخوانی ها را تا سطح گمارش اشیا (انتساب اشیا) رو دنبال کنه. درواقع اینجوری فکر می کنه که شیی عضو هنگام خروج از سازنده، تهی شده و هشدار CS8618 میده؛ اما مشخصه ی MemberNotNull این مسئله رو حل کرده...حالا چطوری؟

به این صورت که شما میاین این ویژگی رو روی متد کمکی اعمال می کنین. کامپایلر بعد میبینه که شما این مقدار رو تنظیم کردید و متوجه میشه که این فراخوانی از سمت سازنده هست. MemberNotNullWhen هم همینطوری هست. شما میتونین یه نمونه از MemberNotNull در BMxx80 temperature sensors رو تو کدهای زیر ببینین:



کد اصلی از کامپایل شرطی استفاده می کنه. به این دلیل که این پروژه چند هدفه (چند نسخه از دات نت کور رو پشتیبانی میکنه) هست و این مشخصه هم فقط توسط دات نت 5 به بعد پشتیبانی میشه...

استفاده از این مشخصه، به ما کمک می کنه که از برررسی های زمان اجرا در سازنده، قسر در بریم :)

در غیر این صورت، برای الزامات تهی پذیری رو ارضا کنیم (مثل نسخه های قبلی دات نت)

ویراست فنی: محمد ملک مکان

نویسنده : شمیم گلچین نژاد
دوشنبه 24 آذر 1399
+ 10 -

خوشحال میشیم نظرتُ بدونیم