المشاركات : 204
المواضيع 14
الإنتساب : Jun 2015
السمعة :
10
الشكر: 250
تم شكره 222 مرات في 132 مشاركات
السلام عليكم
قرآت معلومه وهي ان المصفوفات Arrays هي Reference Type
هل قصده فقط بان المصفوفات التي غير معروف عدد عناصرها باستثناء Strings
وشكرآ جزيلآ لكم
المشاركات : 204
المواضيع 14
الإنتساب : Jun 2015
السمعة :
10
الشكر: 250
تم شكره 222 مرات في 132 مشاركات
مشكور اخوي اتضحت لي اشياء كثيرة
منها يمكنني جعل الString غير مرجعية
Dim str(1000) As Char
str = "vb4arb".ToCharArray
هل هناك حجم محدد لتصبح مرجعية
انا معقد مع القسم heap هل الgarbage collector سريع في عملية التنظيف
المشاركات : 531
المواضيع 4
الإنتساب : May 2016
السمعة :
55
الشكر: 694
تم شكره 535 مرات في 367 مشاركات
16-07-16, 06:04 AM
(آخر تعديل لهذه المشاركة : 17-07-16, 10:11 PM {2} بواسطة الوادي.)
اللي فهمته أنه لا يمكن جعل الString غير مرجعية
والكود اللي أنت وضعته وذلك بوضع مصفوفة من Char فأنت دخلت في مسألة المصفوفة،
والمصفوفة كما تم تعريفها أنها مرجعية حتى لو حدد عدد عناصرها كما في المثال ب(1000)، لأن هذا العدد قابل للزيادة،
هل اتضح؟.
لا أدري ماذا تقصد ب (هل الgarbage collector سريع في عملية التنظيف)
ولكن عندما تعمل GC.Collect فأنت تطلب التنظيف حالاً دون الانتظار حتى يقوم هو بعمله تلقائياً (طبعا نتيجة حسابات معينة يقوم بها)،
ولا أحد يستخدم GC.Collect إلا أذا يعرف أن برنامجه يستهلك الذاكرة بشكل سريع لدرجة أنه لم يحن موعد عمل Garbage collection التلقائي.
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
هناك نوع من التحايل الذي من الممكن إستخدامه لكي تجعل المصفوفة مرجعية بشكل ما و هو أن تقوم بأخذ Shallow Copy من المصفوفة الأصلية وذلك بتحديد Start index و العدد المطلوب Count نسخه من المصفوفة الأصلية والفكرة تعتمد علي أن تحدد Range معين من المصفوفة الأصلية و تقوم بإستنساخه الي مصفوفة جديدة
وأعتقد ان الحل الأسهل لتنفيذ ذلك يكمن في استخدام List(Of T).GetRange
اما الحل الأصعب لك هو ان تبني مصفوفة جديدة تماما عن طريق عمل implementation وذلك باستخدام IEnumerable(Of Integer) ومن ثم و في constructor الخاص بالكلاس الجديد تمرر StartIndex وهو الذي يحدد بداية مكان النسخ و ايضا تمرر له العدد المطلوب نسخه وهو ما يمثله Count
طبعا انت هنا تحتاج لكتابة بعض الدوال الإضافية لكي يعمل الكلاس بكفاءة لكن كما قلت هذا هو الحل الأصعب و انت تحتاج الي دراية كاملة بالمصفوفات لكي تكتب مثل هذا الكلاس
المشاركات : 204
المواضيع 14
الإنتساب : Jun 2015
السمعة :
10
الشكر: 250
تم شكره 222 مرات في 132 مشاركات
صراحة انا الان مشتت
لكن ساقرآ اكثر على المصفوفات
شكرا لك ماقصرت وشكرا اخ silverlight على الإضافة
المشاركات : 204
المواضيع 14
الإنتساب : Jun 2015
السمعة :
10
الشكر: 250
تم شكره 222 مرات في 132 مشاركات
17-07-16, 08:43 AM
(آخر تعديل لهذه المشاركة : 17-07-16, 09:15 AM {2} بواسطة LoveVb.)
الحمدلله اتضح لي اشياء كثيرة
وتاكدت بكلامك اكثر
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))
يشيرآن الى المؤشر نفسه