كيف أضع معلمات اختيارية في الأساليب؟

StackOverflow https://stackoverflow.com/questions/823967

  •  05-07-2019
  •  | 
  •  

سؤال

هل من الممكن إعلان المعلمات الاختيارية في الأساليب؟

في دلفي ، على سبيل المثال ، يمكنني أن أفعل شيئًا مثل:

procedure Test(p1:integer;p2:integer;p3:integer = 2;p4:integer = 4)

عندما أسمي هذه الوظيفة ، يمكنني أن أسميها بأربعة معلمات أو مع معلمتين:

Test(2,3); //p3 = 2,p4 = 4.
Test(2,3,4,5); //p3 = 4,p4 = 5;

كيف يمكن ذلك في C#؟

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

المحلول

أخشى أن هذا غير ممكن في C# 1 إلى 3. ومع ذلك ، فإن الخبر السار هو أنه نظرًا لأنها كانت ميزة تم طلبها كثيرًا (على الرغم من أن هناك بالتأكيد بعض الذين يفضلون رؤيته) ، قررت Microsoft أخيرًا إضافة إلى C# 4.

يرتفع بناء جملة C# 4 على النحو التالي:

public static void SayHello(string s = "Hello World!")
{
    Console.WriteLine(s);
}

الاستخدام:

SayHello(); // Prints "Hello World!"
SayHello("Hello."); // Prints "Hello."
SayHello(s: "Hello."); // Prints "Hello."

(المثال الأخير يستخدم وسيطة مسماة ، والتي ليست ضرورية حقًا في هذه الحالة ، ولكنها تساعد عندما يكون لديك معلمات اختيارية متعددة.)

يمكنك قراءة المزيد حول هذا الموضوع على منشور المدونة هذا.

نصائح أخرى

إما عليك الانتظار ج# 4.0, ، الذي يدعم المعلمات الاختيارية ، أو يستخدم آليات التحميل الزائد القياسي:

void Test(int p1, int p2, int p3, int p4)
{ }

void Test(int p1, int p2)
{
    Test(p1, p2, 2, 4);
}

سيكون من الممكن في C# 4.0 ، ولكن حتى يتم إصداره ، يمكنك العمل حوله عن طريق إنشاء إصدارات محملة من طريقتك:

public void MyMethod( int a, int b, int c )
{
    ...
}

public void MyMethod( int a, int b)
{
   MyMethod(a, b, 4);
}

يمكنك استخدام الوسائط المتغيرة

استخدم الكلمة الرئيسية Params.

void paramsExample(params int[] argsRest)
{

 if(argsRest.Length == 2) then...
 else if(argsRest.Length == 4) then...
 else error...

}
using System;
using System.Runtime.InteropServices;

   public static void SayHello([Optional][DefaultParameterValue("Hello Universe!")] string s)
   {
      Console.WriteLine(s);
   }

فعله! قون

لا يمكنك فعل ذلك بعد. أعتقد أنه ميزة C# 4.0.

يمكنك استخدام Params كعمل حولها ، ولكن لا يمكن استخدامها إلا بالتتابع ، وليس الطريقة التي تعامل بها بعض اللغات المعلمات الافتراضية.

يمكنك استخدام الأحمال الزائدة مثل هذا

Test(int p1, int p2)
Test(int p1, int p2, int p3)

يمكنك جعلهم يتصلون بأسلوب خاص كهذه

Test(int[] ps)

ثم معالجة البيانات.

هناك طريقة أخرى للتعامل مع ذلك وهي عدم استخدام الحمولة الزائدة/المعلمات الاختيارية ، وبدلاً من ذلك قم بتسمية الطرق وفقًا لما يجب القيام به - قد يبدو بمثابة مفاضلة سيئة ، ولكن من المحتمل أن يصبح الكود الخاص بك أسهل في القراءة.

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