ڤالیو تایپ و ڕیفرێنس تایپ لە Dot Net Framework

0
بابەت بڵاوبکەوە......
Share on FacebookEmail this to someoneShare on Google+Pin on PinterestTweet about this on TwitterShare on LinkedInShare on RedditShare on TumblrDigg this

لە .Net Frameworkدا چەندین تایپ هەن، وەک: int، float، object، string ئەو تایپانەش پۆلێن دەکرێن بۆ دوو کۆمەڵە: Value Types و Reference Types. گۆڕاوەکانی جۆری Value Type ڕاستەوخۆ داتایەکەی خۆیان لەناو خۆیان هەڵدەگرن. بەڵام ئەوانەی جۆری Reference Type لە بڕی داتایەکە، تەنها شوێن(Reference)ی داتایەکە هەڵدەگرن.

تێبینی: هەرچەندە ئەو بابەتە یەکێکە لە بابەتە بنەڕەتییەکانی پڕۆگرامسازی و هەموو پڕۆگرامسازێک دەبێ بیزانێت، لەگەڵ ئەوەشدا بابەتێکی کەمێک ئاڵۆزە چونکە هەر زمان و فرەیموۆرکێک بە شێوەیەک مامەڵە لەگەڵ ئەو بابەتە دەکات. وە زۆرجار ڕەفتاری ئەو دوو تایپە لە زمانێکەوە جیاوازە لەگەڵ زمانێکی دیکە. بۆیە لەکاتی بوونی هەر هەڵەیەک، تکایە هەوڵبدە ڕقت لێم نەبێتەوە، لەجیاتی ئەوە دەتوانی لە کۆمێنت ڕاستم بکەیتەوە 🙂

یەکەم: Value Types

گۆڕاوەکانی جۆری Value Type نرخەکانیان لەناوخۆیان هەڵدەگرن، چەند نمونەیەک لەو تایپانە: bool، int، float، double، decimal و هەموو ئەو تایپانەی کە پڕۆگرامەر بەهۆی struct ــەوە دروستیان دەکات.

گۆڕاوەکانی جۆری ڤالیو تایپ ئەو خاسیەتانەیان هەیە:

١. کاتێک گۆڕاوێکی ڤالیو تایپ یەکسان (Assign) دەکەیت بە گۆڕاوێکی دیکەی ڤالیو تایپ، ئەوا نرخەکەی کۆپی دەبێتە ناو گۆڕاوەکە. بەوەش هەردوو گۆڕاوەکە سەربەخۆ دەبن و گۆڕانکاری لە بەهای یەکێکیان کاریگەری دروستناکاتە سەر بەهای ئەوەی دیکە. بۆ نموونە:

هەر وەک لە نموونەکەدا دیارە، گۆڕینی بەهای val2 کاریگەری ناکاتە سەر بەهای val1. هەرچەندە کە لە هێڵی دووەمدا val2 مان یەکسان کرد بە val1.

٢. هەموو ڤالیو تایپەکان لە System.ValueType ـەوە سەرچاوەیان گرتووە.

٣. ڤالیو تایپەکان ناتوانن نە inherit بکەن و نە لێشیانەوە inherit بکرێت. بەڵام دەتواندرێ Interface ـەکانیان لەسەر جێبەجێبکرێت. بۆ نموونە:

٤. ڤالیو تایپەکان ناتوانن بەهای null وەربگرن، بەڵام بەهۆی تایبەتمەندی Nullable Types ــەوە دەکرێ null یش وەربگرن. Nullable Types یش هەر لە جۆری ڤالیو تایپن.

دووەم: Reference Types

گۆڕاوەکانی ڕێفرێنس تایپ بەهاکانیان لەنێوخۆیان هەڵناگرن، لەبەر ئەوەی زۆربەی کات بەهاکانیان زۆر گەورەن. لەبڕی ئەوە، تەنها ئاماژەیەک (ڕێفرێنسێک) بۆ شوێنی هەڵگرتنی بەهاکانیان لەخۆدەگرن. واتا ناونیشانی بەهاکانیان هەڵدەگرن لە بیرگەی کۆمپیوتەر (RAM)، بۆ ئەوەی هەرکاتێک بەرنامەکە پێویستی بە بەهای ئەو گۆڕاوانە بوو، ڕاستەوخۆ بچێتە ئەو ناونیشانەی کە لەنێو گۆڕاوەکەدایە و بەهاکەی دەدۆزێتەوە. چەند نموونەیەک لەو جۆرە تایپانە: string، object، dynamic و هەر کڵاسێکی دیکە کە لە object و سەرچاوە بگرێت (inherit بکات).

reference-types

گۆڕاوەکانی جۆری ڕێفرێنس تایپ ئەو خاسییەتانەیان هەیە:

١. کاتێک گۆڕاوێکی ڕێفرێنس تایپ یەکسان دەکەیت (Assign) بە گۆڕاوێکی دیکەی ڕێفرێنس تایپ، نرخەکەی کۆپی نابێتە ناو گۆڕاوە نوێیەکە. بەڵکو تەنها ناونیشانەکەی (ڕێفرێنس) کۆپی دەبێتە ناو گۆڕاوە نوێیەکە. بۆیە ئەگەر نرخی گۆڕاوە نوێیەکە بگۆڕیت، ئەوا کاریگەری دەکاتە سەر نرخی گۆڕاوە کۆنەکەش، چونکە هەردووکیان ئاماژە بۆ هەمان شوێن دەکەن لە بیرگەدا.

٢. ڕێفرێنس تایپەکان دەتاوانن لە تەنەکانی دیکە inherit بکەن و تەنەکانی دیکەش دەتوانن لێیانەوە inherit بکەن. وە هەروەها دەشتوانن Interface یش قبوڵ بکەن.

٣. ڕێفرێنس تایپەکان دەتوانن نرخی null قبوڵ بکەن؛ ئەوکات ئاماژە بۆ هیچ شوێنێکی بیرگە ناکەن.

٤. ڕێفرێنس تایپەکان لەسەر Heap هەڵدەگیرێن. وە کاری کۆکەرەوەی خاشاک (Garbage Collector) ـە کە بیانسڕێتەوە لە بیرگە کاتێک بەرنامەکە کاری پێنەمان.

نموونەی ئەو دوو جۆرە تایپە لە ژیانی ڕاستی

جۆن سکیت لە یەکێک لە بابەتەکانی نموونەیەکی باش دەهێنێتەوە بۆ تێگەیشتن لە ڤالیو تایپ و ڕیفرێنس تایپ:

وایدابنێ کە لیستی ناوی وڵاتانی جیهانت پێویستە. ئەو چەشنە زانیارییە هەم بەشێوەی چاپکراو هەیە و هەم لەسەر وێبیش دەتوانی بیدۆزیتەوە. بەڵام ئەو دوو ناوەندە (Medium) بە دوو جۆری جیا ڕەفتار دەکەن. پەڕە چاپکراوەکان زۆرتر وەک Value Type ڕەفتار دەکەن و وێبسایتەکانیش زۆرتر وەک Reference Type.

کە سەیری پەڕەکان دەکەیت، هەموو زانیارییەکانت لەبەر دەستە، پەڕەکان خۆیان زانیارییەکانیان تێدایە. بەڵام ئەگەر بتەوێ سەردانی وێبسایتێک بکەیت، پێویستیت بە URLی ئەو وێبسایتە هەیە. لەم نموونەیەدا URL بەرانبەرە بەو Reference (ئاماژە، ئاماژەدان؛ دیاریکردنی شوێنی شتێک)ـەی کە بەکاردێت لە دەستپێگەیشتن بە بەهای گۆڕاوێکی جۆری ڕێفرێنس تایپ. URL ەکە زانیارییەکە (لیستی ناوی وڵاتانی جیهان)ی تێدا نییە، بەڵکو تەنها ڕێگای دەستگەیشتن بەو زانیارییەت نیشان دەدا.

ئێستا بیربکەوە چی دەبێت ئەگەر زانیارییەک گۆڕدرا. وایدابنێ دوو کەس پەڕەیەکی چاپکراوی ئەو لیستەیان لایە، ئەگەر یەکێکیان ناوی یەکێک لە وڵاتەکان بسڕێتەوە، کەسەکەی دیکە گۆڕانکارییەکە نابینێت. هەردوو کۆپی سەربەخۆن و پەیوەندیان بە یەکترەوە نییە. بەڵام ئەگەر دوو کەس URLی هەمان پەڕەی وێبسایتەکەیان هەبێت. کاتێک کە خاوەنی وێبسایتەکە گۆڕانکارییەک لە لیستی وڵاتان دەکات، هەردوو کەسەکە گۆڕانکارییەکە دەبینن. هەردوو Reference (URL) ــەکە ئاماژە بۆ هەمان داتا دەکەن.

ئەی ئەگەر ویستت کۆپییەک لە زانیارییەکە دروستبکەیت؟ ئەگەر پەڕەیەکی چاپکراوم لەلا بێت و بمەوێ پێتی بدەم، دەبێ فۆتۆکۆپی (استنساخ)ی بکەم. هەموو داتاکە کۆپی دەبێت. کە کۆپیم کرد، کۆپییە “نوێ”یەکە سەربەخۆیە لە کۆپییە “کۆن”ـەکە. بەڵام ئەگەر URLی پەڕەێ وێبسایتێکم لابێت، ئەوکات تەنها URLــەکەت دەدەمێ. ئەو شتەی کۆپی دەبێ URL ـەکە، واتا reference ــەکە، نەوەک زانیارییەکە خۆی. هەر لەسەر خاڵی پێشووتر، ئەگەر ئەو پەڕەیە چاپکراوە ببەیت کە بۆم فۆتۆکۆپی کردی و بە ئارەزووی خۆت شتی لەسەر بنووسی، هیچ کاریگەرییەکی لەسەر کۆپییەکەی من نییە. بەڵام ئەگەر وێب پەیجەکە دەستکاری بکرێت (بۆ نموونە ئەگەر پەڕەیەکی ویکی “Wiki” بێت) و بچی دەستکاری بکەیت، ئەوکات کە سەردانی پەڕەکەم کردەوە بەهۆی URLــەکەی خۆم، ئەوا منیش گۆڕانکارییەکان دەبینم.

ئێستا با شتەکان کەمێک قورستر بکەین. وای دابنێ کە ئێمە URLــەکان لەسەر پارچە کاغەزێک دەنووسین. ئەگەر بمەوێ کۆپییەک لە URLــەکەت پێ بدەم، دەبێ پارچەیەک کاغەزت پێ بدەم کە URLــەکەی لەسەر نووسرابێت. ئەگەر دەستکاری نووسینی سەر پارچە کاغەزەکەی خۆت  بکەیت، ئەوە هیچ گۆڕانکارییەک بەسەر ئەو پەڕەیە ناهێنێت کە لەلای منە. هەردووکیان سەربەخۆن، هەرچەندە کەوا ئاماژەشیان بۆ هەمان وێب پەیج دەکرد. وە ئەگەر بێتو نووسینی سەر یەکێک یان هەردوو پارچە کاغەزەکە بگۆڕین، هیچ گۆڕانکارییەک بەسەر وێب پەیجەکەدا نایەت.

هەمان نموونە بە کۆد:

 

قوتابی بەشی ئەندازیاریی سیستەمی زانیاری لە زانکۆی پۆلیتەکنیکی هەولێر

لێدوانێک بنووسە