![]() |
|
مقال - أفكار في الدوت نت OutAttribute Class - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : مقال - أفكار في الدوت نت OutAttribute Class (/showthread.php?tid=5201) |
مقال - أفكار في الدوت نت OutAttribute Class - RaggiTech - 05-10-12 كاتب الموضوع : silverlight
بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته مقدمـــــــــــة: يوجد في الدوت نت كلاسا اسمه OutAttribute وهو موجود تحديدا في System.Runtime.InteropServices NameSpace وفي موضوعنا هذا سنوضح كيفية استخدام هذا الكلاس ولمزيد من المعلومات عن هذا الكلاس يمكنكم زيارة هذا اللينك المثال الأول: لنفرض أننا لدينا String Array تم تعريفها كالتالي وكما ستلاحظون فهي تحتوي علي أرقام فقط كود : Dim arr As String() = {10, 100, 50, 30, 40, 200, 5, 12}غالبا هنا ما نقوم بكتابة دالتين للحصول علي اقل قيمة و أعلي قيمة وهاتان الدالتان سيكون الكود الخاص بهما كالأتي كود : Private Function GetMaximumValue(ByVal StringArr As String()) As Integerكود : Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loadالمثال الثاني: الأن كيف نستخدم الكلاس OutAttribute للحصول علي نفس النتائج الموجودة بالمثال الأول ولكن يجب أن نتفهم أننا وعند استخدام الكلاس OutAttribute فإن البيانات المرتبطة به يتم تمريرها باستخدام ByRef فقط حيث أننا لو مررنا البيانات باستخدام ByVal فإننا لن نحصل علي شئ ولمزيد من المعلومات عن الفرق بين ByVal و ByRef يوجد بالمنتدي موضوعا كتبه الأخ الفاضل مروان ويمكنكم الاطلاع عليه في هذا اللينك الفرق بين ByVal و ByRe الأن لنعيد صياغة الدالتان الموجودتان بالمثال الأول وبدلا من كتابنهم كدالتان سنكتب فقط روتين أو Sub والكود التالي يوضح ذلك كود : Private Sub GetMaximumMinimumValue(ByVal StringArr As String(), <Out()> ByRef max As Integer, <Out()> ByRef min As Integer)ولكي نستخدم الروتين أو الكود أعلاه علينا أن نقوم بتعريف المدخلات كالأتي تعريف متغير يعبر عن String Array كالتالي كود : Dim arr As String() = {10, 100, 50, 30, 40, 200, 5, 12}تعريف متغيران عبارة عن Integer ولا نعطي لهم اي قيمة كود : Dim min As Integerكود : GetMaximumMinimumValue(arr, max, min)حيث هنا نعيد مساواة القيم ثانية مع ما يناظرها كود : max = maxالأن لنستخدم القيمان التي حصلنا عليهم كما نريد والكود التالي يوضح الشكل النهائي للكود كود : Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loadطبعا ولأنني أعشق الجرافكس فمن الصعب أن أترك المقال بدون أن أضع أمثلة توضح كيفية استخدام الكلاس OutAttribute في +GDI المثال الثالث: لنفرض أنن نريد أن نحصل علي نقطة مركز المستطيل فغالبا هنا علينا أن نمرر متغير يشير الي هذا المستطيل وتكون النتيجة التي نحصل عليها عبارة عن نقطة والكود التالي يوضح شكل الروتين المطلوب كتابته كود : Private Sub GetRectCenterPoint(ByVal r As Rectangle, <Out()> ByRef pt As Point)كود : Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)المثال الرابع: ويمكن إعادة كتابة الروتين أعلاه والموجود بالمثال الثالث بالشكل التالي أيضا كود : Private Sub GetRectCenterPoint(ByVal r As Rectangle, <Out()> ByRef x As Integer, <Out()> ByRef y As Integer)كود : Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)إن شاء الله في المشاركات التالية سأحاول أن أضع بعض الأمثلة الإضافية بالتوفيق للجميع وتقبلوا تحياتي أخوكم عمر |