سؤال

كما أفهمها ، يقوم C# بتمرير المعلمات إلى طرق بالرجوع إليها. في VB.NET ، يمكنك تحديد هذا مع Byval و Byref. الافتراضي هو بيفال.

هل هذا للتوافق مع Visual Basic 6.0 ، أم أنه عشوائي فقط؟ أيضًا ، كيف يمكنني تحديد ما يجب استخدامه في C#؟ أنا أحب فكرة تمرير المعلمات حسب القيمة.

هل كانت مفيدة؟

المحلول

المعلمات في C# هي ، بواسطة إفتراضي مرت حسب القيمة. لا يوجد معدّل لجعل هذا صريحًا ، ولكن إذا أضفت ref / out المعلمة هي مرجعية.

الارتباك المعتاد هنا هو الفرق بين:

  • تمرير نوع القيمة حسب القيمة (التغييرات في نوع القيمة غير مرئية للمتصل ، ولكن يجب أن تكون أنواع القيمة غير قابلة للتغيير على أي حال)
  • تمرير نوع القيمة بالرجوع إليه (التغييرات في نوع القيمة مرئية للمتصل ، ولكن يجب أن تكون أنواع القيمة غير قابلة للتغيير على أي حال-مهم جدًا سأقولها مرتين ؛ P)
  • تمرير مرجع حسب القيمة (التغييرات إلى الحقول/الخصائص من النوع المرجع مرئي للمتصل ، ولكن إعادة تعيين نوع Ref-type لكائن جديد/مختلف ليس مرئي)
  • تمرير مرجع بالرجوع (التغييرات في الحقول/الخصائص ، و إعادة تعيين المرجع مرئي للمتصل)

نصائح أخرى

تمرير القيمة هو الافتراضي في C#. ومع ذلك ، إذا كان المتغير الذي يتم تمريره هو نوع مرجعي ، فأنت تمرر المرجعي بالقيمة. ربما هذا هو أصل ارتباك الخاص بك.

في الأساس ، إذا قمت بتمرير مرجع بالقيمة ، فيمكنك تغيير الكائن الذي يشير إليه وستستمر هذه التغييرات خارج الطريقة ، ولكن لا يمكنك جعل متغير يشير إلى كائن مختلف ويستمر هذا التغيير خارج الطريقة.

يتم تمرير المعلمات في C# "byval" بشكل افتراضي. يجب عليك تحديد "المرجع" أو "الخروج" إذا كنت تريد سلوكًا مختلفًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top