مناطق التعليمات البرمجية غير مسموح بها داخل هيئات الطريقة في VB.NET؟

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

  •  01-10-2019
  •  | 
  •  

سؤال

ملحوظة: تمت إضافة هذه "الميزة" الآن إلى Visual Studio 2015 ، لكن السؤال سيستمر لفترة من الوقت لأنه ليس كل مطور أو كل متجر Dev يحصل على أحدث وأكبر IDE بمجرد ظهوره.

السؤال الأصلي:

عادةً ما لا "لا أحتاج" أو حتى أفكر في ميزة سخيفة مثل مناطق الكود داخل أجسام الأسلوب ولكن: أنا أعيد إعادة تمثيل رمز VB.NET حيث تعمل الأساليب بشكل روتيني على خمسمائة سطر من التعليمات البرمجية أو أكثر والمراجع تقترن بإحكام شديد يتحدى الكود إعادة إنشاء بسيطة مثل استخراج الطريقة.

ولهذا السبب اعتقدت أنني سأحاول المناطق داخل الجسم. أردت فقط تنظيم الكود على المدى القصير. لكن IDE لا تسمح لي (أسفرت عن خطأ في المترجم.) أنا فقط فضولي لسبب؟ يبدو أن مناطق التعليمات البرمجية لا ينبغي أن تؤثر على المترجم أو Intellisense وما إلى ذلك. هل أفتقد شيئًا؟ (لا يزال يستخدم مقابل 2005 راجع للشغل.)

مثير للإعجاب: هذا يبدو أن اللغة محددة. لا بأس في C# (لم أتحقق من ذلك في البداية) ولكن ليس في vb.net.

public module MyModule
    Sub RunSnippet()
        dim a as A = new A (Int32.MaxValue )

        #region 
        Console.WriteLine ("")
        #end region
       ....

يحصل هذا على خطأ في برنامج التحويل البرمجي ولكن إصدار C# على ما يرام.

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

المحلول

اعتبارا من نوفمبر 2015: في Visual Studio 2015 إنه مدعوم الآن ، فقط افعل ما تريد.

عينة من الرموز:

With frmMain
#region "A sample region in odd place"
  .show()
  .text = "Sample"
#end region
End With

ملحوظة: في الإصدارات السابقة من Visual Studio يبدو أنه لا يعمل في VB.NET ، ولكن في C# إنه يعمل.

نصائح أخرى

أعتقد أن مناطق التعليمات البرمجية ربما لن يتم دعمها في أجسام الطريقة لأنها ، كما تضعها ، ستكون "ميزة سخيفة إلى حد ما) - ومع ذلك ، في C#، هذا يفعل العمل ، على الأقل في VS 2008 و VS 2010 - ليس فقط في VB.NET.

أن يقال ، أود تجنب ذلك. سيؤدي وضع المناطق في طريقة ما إلى أن يؤدي الأشخاص إلى أساليب أكبر (لأن هذه هي المرة الوحيدة التي يكون فيها الأمر جديراً بالاهتمام) ، وهو أمر يجب تجنبه ، ولا يتم تشجيعه.

إذا كان الرمز الخاص بك:

يتحدى إعادة إنشاء بسيطة مثل استخراج الطريقة

أود أن أركز ، بدلاً من ذلك ، على القيام بإعادة إنشاء "معقدة" (أو أي شيء يتطلب الأمر) لمحاولة تفكيك هذه الأساليب. لا توجد طريقة "أربع أو خمسمائة سطر" ، يمكن الحفاظ عليها على الإطلاق في حالتها الحالية.

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

إنه صريح في الفصل 3.3 من مواصفات لغة Visual Basic 9.0:

توجيهات المنطقة خطوط مجموعة الكود المصدر ولكن ليس لها تأثير آخر على التجميع. يمكن انهيار المجموعة بأكملها وإخفائها ، أو توسيعها وعرضها ، في بيئة التطوير المتكاملة (IDE). هذه التوجيهات خاصة من حيث أنها لا يمكن أن تبدأ أو إنهاء في الجسم

أو بعبارة أخرى: لا يمكنك فعل ذلك لأن المواصفات تقول ذلك.

فيما يتعلق بالسبب الذي تم تحديده على هذا النحو ، أعتقد أنه له علاقة مع ميزة IDE القديمة التي كان لدى VB طالما استطعت تذكر: أدوات + خيارات ، محرر النصوص ، الأساسي ، محدد VB ، عرض الإجراءات العرض فواصل. هذا مجرد تخمين ، ربما ليس جيدًا جدًا.


تحديث: الآن مدعوم من Roslyn ، وتضمنت أولاً مع VS2015.

طريقة بديلة بسيطة أخرى:

ما يمكنك فعله هو تحديد الرمز الذي تريد إضافة #Region #End Region وانقر بشكل أساسي:

كنترول+م, كنترول+ح

هذا يلف الرمز بشكل أساسي. وبعد ذلك لجعله أكثر إمتاعًا ويسهل العثور عليه يمكنك التعليق على الرمز. ستبدو النتيجة النهائية مثل هذا:

enter image description here

لا أعرف عن VB ، ولكن في C# تم السماح بذلك منذ 1.0 بقدر ما أعرف.

في الواقع ، يمكنك حتى وضع مناطق التعليمات البرمجية في أماكن فردية عبر النطاقات. فمثلا:

class Test
{
    static void Main()
    {
        if (DateTime.Now.Hour > 12)
        {
#region Foo
            Console.WriteLine("Afternoon");            
        }
#endregion
    }
}

هنا المنطقة يبدأ في حدود if بيان ، لكن ينتهي خارجها. فظيع ، لكن المترجم على ما يرام معها.

ماذا تقصد عندما قلت إن IDE لم "تدع" تضع الرمز في المناطق؟ هل حصلت على خطأ في المترجم؟

كان هذا ببساطة خيارًا قام به فريق VB عند إضافة ميزة إضافة المناطق إلى الإصدار 7 من لغة Visual Basic. كان يُنظر إليه على أنه ميزة كانت مفيدة للتنظيم على مستوى الإعلان وليس داخل طريقة ، وبالتالي تم السماح بها فقط في هذا المستوى.

شعر فريق C# بشكل مختلف تجاه هذه الميزة والسماح لها في العديد من الأماكن الأخرى. لقد وجدت دائمًا أنه من المفاجئ أن C# #region يمكن أن تحدث التوجيهات في سياقات إعلان مختلفة.

#region Foo
class Bar {
#endregion

}

الكود المكافئ غير مسموح به في VB.

لأي شخص يبحث عن أحدث إجابة على هذا السؤال ، أصبح هذا ممكنًا الآن في VB.NET (بدءًا من الإصدار 14 على).

توجيهات المنطقة داخل هيئات الأسلوب

يمكنك وضع #المنطقة ... #نهاية محددات المنطقة في أي مكان في ملف ، ووظائف داخلية ، وحتى تمتد عبر أجسام الوظائف.

المثال من OP الآن بناء جملة قانوني تمامًا:

Sub RunSnippet()
    Dim a as A = New A (Int32.MaxValue )

    #Region "Test"
    Console.WriteLine ("")
    #End Region
End Sub

Visual Studio 2003 كان لديهم من أجل vb.net ، ولكن تمت إزالة الميزة في Visual Studio 2005 و لاحقا. مزعج حقًا عند إعادة إنشاء إجراءات كبيرة ، ولكن يمكنك تقسيم نافذة الكود.

بصراحة ، أتمنى أن تقيد استخدام المنطقة لأنها تستخدم بشكل مفرط. لديّ ماكرو يقوم بإخراجها من جميع ملفات التعليمات البرمجية عند وراثة مشاريع C#.

ميزة أخرى تم إزالتها كانت قائمة الأساليب المتجاوز في شريط التنقل. أتحقق لمعرفة ما إذا كانوا يعيدون إضافة هذه الميزة لكل إصدار جديد من استوديو مرئي منذ عام 2005.

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