الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في كود؟

بدأه Rasool Micro في 14 سبتمبر 2011 · 4 رد · 399 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

اخواني واخواتي المبرمجين .... في الحقيقة عندي مشكلة في كود برنامج اقوم بصنعه وقد صادفتني مشكلة في كود وهو:

عندما اقوم بالاعلان عن مصفوفة من string واقوم بكتابة ثلاثة procedures وتكون البرامترات كلها byval واقوم بوضع احد البرامترات هو مصفوفة من نفس النوع للمصفوفة التي قمت بالاعلان عيها في class

السؤال هو byval تقوم بتمرير براميتر من دون تغيير قيمته اي لا يرجع قيمته الى الsub الذي قام باستدعائه ولكن عندما امرر هذه المصفوفة تتغير قيمته حتى لو كان ليس public لكل الclass فما هو السبب؟

لقد قمت بكتابة كود تجريبي لكم لكي تتبين لكم المشكلة

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = ""
        A()
    End Sub
    Sub A()
        Dim ch(2, 2) As String
        B(ch)
        For x As Integer = 0 To 2
            For y As Integer = 0 To 2
                Label1.Text &= ch(x, y) & vbNewLine
            Next
        Next
    End Sub
    Sub B(ByVal ch(,) As String)
        C(ch)
    End Sub
    Sub C(ByVal a(,) As String)
        a(0, 0) = "A"
    End Sub
End Class

قوموا بتجربة الكود وستعرفون ماذا اقصد

#2

السلام عليكم ورحمه الله وبركاته

اخي عند تمرير المصفوفة ByVal يتم تمرير مؤشر للمصوفة وليس عمل نسخة من المصفوفة, لذا عند تغيير اي عنصر فيها يظهر التأثير في المصفوفة قبل الاستدعاء, يمكنك تطبيق المثال الموجود في الرابط التالي http://www.java2s.com/Code/VB/Language-Basics/ArrayparameterpassedbyValueandbyReference.htm لتوضيح الفكره

تم تعديل هذه المشاركة بواسطة VB Helper في 14 سبتمبر 2011 في 19:00

.:: Wish to become better and better ::.

#3
اقتباس
اخي عند تمرير المصفوفة ByVal يتم تمرير مؤشر للمصوفة وليس عمل نسخة من المصفوفة, لذا عند تغيير اي عنصر فيها يظهر التأثير في المصفوفة قبل الاستدعاء

ولكن اخي الا يوجد حل لهذه المشكلة؟؟ :sad: الا توجد طريقة لتمرير المصفوفة من دون تتأثر؟ :mellow: :excl:

#4

السلام عليكم ورحمه الله وبركاته

اخي قم بتمرير ch.Clone()

.:: Wish to become better and better ::.

#5
VB Helper كتب:

السلام عليكم ورحمه الله وبركاته

اخي قم بتمرير ch.Clone()

اشكرك اخي لقد قمت بعمل الكود ولقد نجح :lol: اشكرك جزيل الشكر :)

مواضيع مشابهة