فيما يلي مقال حول الفرق بين Byval و Byref في ASP الذي شاركه المحرر معك. الأصدقاء المهتمين ، دعنا نتعرف على ذلك مع المحرر!
اسم الملف: | byval.asp | byref.asp |
رمز محدد: | Sub Testmain () DIM A: A = 5 استدعاء testby (أ) الرد. الكتابة أ نهاية الفرعية testby الفرعي (Byval t) t = t+1 نهاية الفرعية استدعاء testmain () ٪> | Sub Testmain () DIM A: A = 5 استدعاء testby (أ) الرد. الكتابة أ نهاية الفرعية testby الفرعي (byref t) t = t+1 نهاية الفرعية استدعاء testmain () ٪> |
نتائج التشغيل: | 5 | 6 |
ختاماً: | ملاحظة: طريقة الإعلان المتغير في testby (byval t) هي byval لا يؤثر تشغيل الروتين الفرعي على قيمة أ | ملاحظة: يتم إعلان الطريقة التي يعلن بها متغير T في Trestby Subroutine (Byref T) لقد تغيرت قيمة النتيجة التشغيل A من خلال الروتين الفرعي |
بعد قراءتها ، ستعرف معنى المقارنة أعلاه.
1. يجب تعيين المعلمة المرجعية (المرجع) بوضوح قبل تمريرها كمعلمة مرجعية في مكالمة عضو في الوظيفة ، في حين لا يجب بالضرورة تعيين معلمة الإخراج (OUT) بوضوح قبل تمريرها كمعلمة إخراج في مكالمة عضو في الوظيفة. يجب تعيين القيمة بوضوح قبل أن يعود عضو الوظيفة بشكل طبيعي.
2. داخل الوظيفة ، تعتبر المعلمة المرجعية (REF) مخصصة في البداية ، ويعتبر معلمة الإخراج (OUT) غير محددة في البداية.
3. بشكل افتراضي ، يتم تمرير جميع المعلمات في C# في القيمة. تمريرة مرجعية فقط إذا تم إدراج المرجع بشكل صريح في معدل المعلمة. ولكن يجب أن يُعرف أنه عندما يكون نوع المعلمة نوع مرجع ، فأنت تمرر مرجعًا إلى كائن بدلاً من الكائن الفعلي.
مثال:
نسخة الكود كما يلي:
add1 sub (byval no as int32)
لا = لا+100
نهاية الفرعية
add2 sub (byref no as int32)
لا = لا+100
نهاية الفرعية
sub button1_click الخاص (المرسل ككائن ، e كـ eventArgs) يعامل button1.click
Dim A AS 32
أ = 100
add1 (أ)
msgbox ("قيمة A هي:" & a) "العرض: قيمة A 100
add2 (أ)
msgbox ("قيمة A IS:" & a) "العرض: قيمة A هي 200 ، لأن المعلمة لا في add2 هي byref ، وهذا هو ،
تم تمرير العنوان ، لذلك بعد تعديل NO في ADD2 ، سوف يسبب ذلك
يتم تعديل قيمة المعلمة A أيضًا.
نهاية الفرعية
Byval هي القيمة التي تم تمريرها. لن يتم تعديل بيانات المصدر. يمكنك استخدام هذه القيمة كمتغير محلي خاص بك. BYREF هي الطريقة التي مرت بها العنوان. يمكن تعديل بيانات المصدر. سيكون لعملياتك على هذا المتغير تأثير على المتغير الذي تنقله ، تمامًا مثل الشعور بالمؤشر.
في برمجة ASP ، غالبًا ما تحتاج إلى كتابة بعض الوظائف (أو الإجراءات) بنفسك لتنفيذ وظائف محددة معينة. في هذا الوقت ، غالبًا ما تحتاج إلى تمرير المعلمات المقابلة إلى الوظائف (أو الإجراءات).
معالجة البيانات في وظيفة (أو عملية) ، أي أنه قد يكون من الضروري الاحتفاظ أو تغيير قيمة المعلمة. فيما يلي أمثلة ذات صلة
استخدم الوظيفة التالية (TestAddress) لجعل قيم إرجاع متعددة لدالة ممكنة (قيمة إرجاع الوظيفة ، القيمة بعد تغيير معلمات متعددة)
1. يقوم Byval بتمرير القيمة: طريقة لتمرير قيم المعلمة بدلاً من العنوان إلى العملية ، والتي تسمح للعملية بالوصول إلى نسخة من المتغير. نتيجة لذلك ، لا يمكن للعملية تغيير القيمة الحقيقية للمتغير.
2. يمر BYREF القيمة: طريقة لتمرير عناوين المعلمة بدلاً من القيم إلى العملية ، والتي تسمح للعملية بالوصول إلى المتغيرات الفعلية. نتيجة لذلك ، يمكن أن تغير العملية القيمة الحقيقية للمتغير. تمرير المعلمات حسب العنوان ما لم ينص على خلاف ذلك.
3. النظام الافتراضي لتمرير القيمة بواسطة BYRE.
مثال:
نسخة الكود كما يلي:
قاتمة أ
أ = 0
document.write "a = 0"
document.write "
التغيير الفرعي (Byref AR)
"
تغيير أ
document.write
أ = 0
document.write "
التغيير الفرعي 2 (Byval AR)
"
تغيير 2 أ
document.write
أ = 0
document.write "
التغيير الفرعي 3 (AR)
"
تغيير 3 أ
document.write
أ = 0
document.write "
تغيير الوظيفة 4 (Byref AR)
"
تغيير 4 أ
document.write
أ = 0
document.write "
تغيير الوظيفة 5 (Byval AR)
"
التغيير 5 أ
document.write
أ = 0
document.write "
تغيير الوظيفة 6 (AR)
"
تغيير 6 أ
document.write
أ = 0
التغيير الفرعي (Byref AR)
AR = 111
نهاية الفرعية
التغيير الفرعي 2 (Byval AR)
AR = 222
نهاية الفرعية
التغيير الفرعي 3 (AR)
AR = 333
نهاية الفرعية
تغيير الوظيفة 4 (Byref AR)
AR = 444
وظيفة نهاية
تغيير الوظيفة 5 (Byval AR)
AR = 555
وظيفة نهاية
تغيير الوظيفة 6 (AR)
AR = 666
وظيفة نهاية
=================================
نتيجة:
أ = 0
التغيير الفرعي (Byref AR)
111
التغيير الفرعي 2 (Byval AR)
0
التغيير الفرعي 3 (AR)
333
تغيير الوظيفة 4 (Byref AR)
444
تغيير الوظيفة 5 (Byval AR)
0
تغيير الوظيفة 6 (AR)
666
تعليمات VBS هي BYREF افتراضيًا ، وهو نفس VB ، حسب العنوان.
مثال:
الخيار صريح
'=======================================================================================
'Parmeter Pass
'1. معلمة تمرير القيمة (اتصل بالقيمة)
'وظيفة testvalue (byval a ، byval b)
لا تؤثر التغييرات على المعلمات A و B في الوظيفة على المتغيرات الخارجية للوظيفة
'
'2. معلمات المؤشر (استدعاء العنوان)
وظيفة Testaddress (Byref A ، Byref B)
'التغييرات في المتغيرات الخارجية للدالة في الوظيفة
'
' يوضح:
1. يمكن أن تكون المعلمات معظم الأنواع التي تدعمها لغة VBScript مثل الأرقام والأحرف والصفائف والكائنات ، إلخ.
2. يمكن أن تكون نوع قيمة إرجاع الوظيفة أيضًا أكثر أنواعًا مدعومة بلغة VBScript مثل الأرقام والأحرف والصفائف والكائنات ، إلخ.
3. أساليب المعلمة استدعاء الإجراء تشبه الوظائف
'=======================================================================================
Dim A1 ، B1
Dim A2 ، B2
وظيفة testvalue (Byval A ، Byval B)
a = a + 1
ب = ب + 1
testvalue = a + b
وظيفة نهاية
وظيفة Testaddress (Byref A ، Byref B)
a = a + 1
ب = ب + 1
testaddress = a + b
وظيفة نهاية
A1 = 11
B1 = 33
A2 = 11
B2 = 33
استجابة. "القيمة الأولية": "&" "
Response.write "A1 =" & A1 & ""
استجابة. "B1 =" & B1 & "
"
Response.write "وظيفة (testValue) القيمة:" & testValue (A1 ، B1) & "
"
استجابة. "القيمة النهائية": "&" "
Response.write "A1 =" & A1 & ""
استجابة. "B1 =" & B1 & "
"
استجابة. "القيمة الأولية": "&" "
Response.write "A2 =" & A2 & ""
استجابة. write "b2 =" & b2 & "
"
استجابة. "الدالة" (TestAddress) القيمة: "& testaddress (A2 ، B2) و"
"
استجابة. "القيمة النهائية": "&" "
Response.write "A2 =" & A2 & ""
استجابة. write "b2 =" & b2
'===============================
'عملية مماثلة
'===============================
sub test_value (byval a ، byval b)
a = a + 1
ب = ب + 1
نهاية الفرعية
sub test_address (byref a ، byref b)
a = a + 1
ب = ب + 1
نهاية الفرعية
وبالمثل ، تمرير صفيف أو كائن (أو تغيير قيمته ، السمة في وظيفة)
يمكن استخدام الكائن كمعلمة
صفيف ، خذ اسم المصفوفة كمعلمة
redim arytest (2،2)
خافت intnum
وظيفة ary_test (byref a)
ary_test = ubound (ary_test ، 2)
وظيفة نهاية
'يتصل
intnum = ary_test (intnum) 'القيمة 3
٪>
ما سبق يدور حول الفرق بين Byval و Byref في ASP. أعتقد أنك تعلمت ذلك. لمزيد من المحتوى ذي الصلة ، يرجى الاستمرار في الانتباه إلى قناة التكنولوجيا الجديدة الخاطئة.