منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
المصفوفات المرجعية - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : المصفوفات المرجعية (/showthread.php?tid=16459)



المصفوفات المرجعية - LoveVb - 15-07-16

السلام عليكم
قرآت معلومه وهي ان المصفوفات Arrays هي Reference Type
هل قصده فقط بان المصفوفات التي غير معروف عدد عناصرها باستثناء Strings
وشكرآ جزيلآ لكم


RE: المصفوفات المرجعية - الوادي - 16-07-16

إذا تم تعريف Reference Type يتضح الأمر

راجع هذا الرابط
Value Types and Reference Types

Reference Type: [هو كل نوع غير ثابت الطول].
String [لأنه طوله غير ثابت رغم وجود خلاف على نوعه].
جميع Arrays حتى لو كانت عناصرها Value type [لأن عناصر Array غير ثابت]
ال Class مثل Form.
Delegates.

Value type: [هو كل نوع ثابت الطول].
جميع انواع البيانات الرقمية (Byte وIntegr و...)
النوع المنطقي Boolean والحرفي Char والتاريخ Date.
جميع Structures حتى لو كانت عناصرها Reference type [لأن عدد عناصر Structure ثابت].





في العودة للموضوع يتضح أن:
Array غير ثابت الطول، إذا هو Reference type


RE: المصفوفات المرجعية - LoveVb - 16-07-16

مشكور اخوي اتضحت لي اشياء كثيرة
منها يمكنني جعل الString غير مرجعية
Dim str(1000) As Char
str = "vb4arb".ToCharArray
هل هناك حجم محدد لتصبح مرجعية
انا معقد مع القسم heap هل الgarbage collector سريع في عملية التنظيف


RE: المصفوفات المرجعية - الوادي - 16-07-16

اللي فهمته أنه لا يمكن جعل الString غير مرجعية

والكود اللي أنت وضعته وذلك بوضع مصفوفة من Char فأنت دخلت في مسألة المصفوفة،
والمصفوفة كما تم تعريفها أنها مرجعية حتى لو حدد عدد عناصرها كما في المثال ب(1000)، لأن هذا العدد قابل للزيادة،

هل اتضح؟.



لا أدري ماذا تقصد ب (هل الgarbage collector سريع في عملية التنظيف)
ولكن عندما تعمل GC.Collect فأنت تطلب التنظيف حالاً دون الانتظار حتى يقوم هو بعمله تلقائياً (طبعا نتيجة حسابات معينة يقوم بها)،
ولا أحد يستخدم GC.Collect إلا أذا يعرف أن برنامجه يستهلك الذاكرة بشكل سريع لدرجة أنه لم يحن موعد عمل Garbage collection التلقائي.


RE: المصفوفات المرجعية - silverlight - 16-07-16

هناك نوع من التحايل الذي من الممكن إستخدامه لكي تجعل المصفوفة مرجعية بشكل ما و هو أن تقوم بأخذ Shallow Copy من المصفوفة الأصلية وذلك بتحديد Start index و العدد المطلوب Count نسخه من المصفوفة الأصلية والفكرة تعتمد علي أن تحدد Range معين من المصفوفة الأصلية و تقوم بإستنساخه الي مصفوفة جديدة


وأعتقد ان الحل الأسهل لتنفيذ ذلك يكمن في استخدام List(Of T).GetRange

اما الحل الأصعب لك هو ان تبني مصفوفة جديدة تماما عن طريق عمل implementation وذلك باستخدام IEnumerable(Of Integer) ومن ثم و في constructor الخاص بالكلاس الجديد تمرر StartIndex وهو الذي يحدد بداية مكان النسخ و ايضا تمرر له العدد المطلوب نسخه وهو ما يمثله Count
 
طبعا انت هنا تحتاج لكتابة بعض الدوال الإضافية لكي يعمل الكلاس بكفاءة لكن كما قلت هذا هو الحل الأصعب و انت تحتاج الي دراية كاملة بالمصفوفات لكي تكتب مثل هذا الكلاس


RE: المصفوفات المرجعية - LoveVb - 16-07-16

صراحة انا الان مشتت
لكن ساقرآ اكثر على المصفوفات
شكرا لك ماقصرت وشكرا اخ silverlight على الإضافة


RE: المصفوفات المرجعية - الوادي - 17-07-16

لماذا (مشتت) ؟


RE: المصفوفات المرجعية - LoveVb - 17-07-16

الحمدلله اتضح لي اشياء كثيرة
وتاكدت بكلامك اكثر
     Dim a(3) As Char
       a = New Char() {"a", "b", "s", "e", "g"}
قام بزيادة طولها
------
ايضا
  Dim a(1) As Char
       a = "vb4arb".ToCharArray
       Dim b(1) As Char
       b = a
       MsgBox(Object.ReferenceEquals(a, b))
يشيرآن الى المؤشر نفسه