تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
المصفوفات المرجعية
#1
السلام عليكم
قرآت معلومه وهي ان المصفوفات Arrays هي Reference Type
هل قصده فقط بان المصفوفات التي غير معروف عدد عناصرها باستثناء Strings
وشكرآ جزيلآ لكم
الرد }}}}
تم الشكر بواسطة:
#2
إذا تم تعريف 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
الرد }}}}
تم الشكر بواسطة: LoveVb
#3
مشكور اخوي اتضحت لي اشياء كثيرة
منها يمكنني جعل الString غير مرجعية
Dim str(1000) As Char
str = "vb4arb".ToCharArray
هل هناك حجم محدد لتصبح مرجعية
انا معقد مع القسم heap هل الgarbage collector سريع في عملية التنظيف
الرد }}}}
تم الشكر بواسطة: الوادي
#4
اللي فهمته أنه لا يمكن جعل الString غير مرجعية

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

هل اتضح؟.



لا أدري ماذا تقصد ب (هل الgarbage collector سريع في عملية التنظيف)
ولكن عندما تعمل GC.Collect فأنت تطلب التنظيف حالاً دون الانتظار حتى يقوم هو بعمله تلقائياً (طبعا نتيجة حسابات معينة يقوم بها)،
ولا أحد يستخدم GC.Collect إلا أذا يعرف أن برنامجه يستهلك الذاكرة بشكل سريع لدرجة أنه لم يحن موعد عمل Garbage collection التلقائي.
الرد }}}}
تم الشكر بواسطة: LoveVb
#5
هناك نوع من التحايل الذي من الممكن إستخدامه لكي تجعل المصفوفة مرجعية بشكل ما و هو أن تقوم بأخذ Shallow Copy من المصفوفة الأصلية وذلك بتحديد Start index و العدد المطلوب Count نسخه من المصفوفة الأصلية والفكرة تعتمد علي أن تحدد Range معين من المصفوفة الأصلية و تقوم بإستنساخه الي مصفوفة جديدة


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

اما الحل الأصعب لك هو ان تبني مصفوفة جديدة تماما عن طريق عمل implementation وذلك باستخدام IEnumerable(Of Integer) ومن ثم و في constructor الخاص بالكلاس الجديد تمرر StartIndex وهو الذي يحدد بداية مكان النسخ و ايضا تمرر له العدد المطلوب نسخه وهو ما يمثله Count
 
طبعا انت هنا تحتاج لكتابة بعض الدوال الإضافية لكي يعمل الكلاس بكفاءة لكن كما قلت هذا هو الحل الأصعب و انت تحتاج الي دراية كاملة بالمصفوفات لكي تكتب مثل هذا الكلاس
الرد }}}}
تم الشكر بواسطة: الشاكي لله , الشاكي لله , LoveVb
#6
صراحة انا الان مشتت
لكن ساقرآ اكثر على المصفوفات
شكرا لك ماقصرت وشكرا اخ silverlight على الإضافة
الرد }}}}
تم الشكر بواسطة: الوادي
#7
لماذا (مشتت) ؟
الرد }}}}
تم الشكر بواسطة: LoveVb
#8
الحمدلله اتضح لي اشياء كثيرة
وتاكدت بكلامك اكثر
     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))
يشيرآن الى المؤشر نفسه
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] بعض دوال التعامل مع المصفوفات LoveVb 2 199 08-05-16, 07:35 PM
آخر رد: LoveVb
  [VB.NET] كيف اصمم فئة تماثل المصفوفات Fantastico 2 149 19-02-16, 01:48 AM
آخر رد: silverlight
  نقاش حول المصفوفات عمرحربة 12 1,091 07-12-12, 03:36 PM
آخر رد: Aly El-Haddad

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم