هل المعلمات الافتراضية ممارسة سيئة في OOP؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

هل تنتهك المعلمات الافتراضية للطرق التغليف؟

ما هو السبب المنطقي وراء عدم توفير المعلمات الافتراضية في C#؟

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

المحلول

وأود أن أنتهز هذا باسم "مسؤول "الإجابة من Microsoft. ومع ذلك، والتقصير (واسمه) معلمات سوف بالتأكيد ستكون متاحة في C # 4.0.

نصائح أخرى

لا، لا يؤثر ذلك على التغليف بأي شكل من الأشكال.إنه ببساطة ليس ضروريًا في كثير من الأحيان.في كثير من الأحيان، يعد إنشاء حمل زائد يتطلب عددًا أقل من الوسائط حلاً أكثر مرونة ونظافة، لذلك لم يرى مصمم C# سببًا لإضافة تعقيد المعلمات الافتراضية إلى اللغة.

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

كما تمت الإشارة إليه، لم تكن المعلمات الافتراضية ميزة ذات أولوية، ولكن من المحتمل أن تتم إضافتها في الإصدار C# 4.0.ومع ذلك، أعتقد أن هناك أسبابًا ممتازة لعدم تضمينه في وقت سابق (في الإصدار 4.0، كما فهمت، كان السبب في الغالب هو دعم كتابة البط أنماط البرمجة حيث تزيد المعلمات الافتراضية من توافق النوع).

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

لسؤالك الأول - لا، انها بالضبط نفس توفير عدة منشئات فوق طاقتها. أما الثاني، لم أستطع أن أقول.

وسيتم إدراج

والمعلمات الافتراضية في C # 4.0

وبعض مواد للقراءة حول هذا الموضوع:

<وأ href = "http://codebetter.com/blogs/matthew.podwysocki/archive/2008/10/29/c-4-0-named-and-optional-parameters-behind-the-scenes. ASPX "يختلط =" نوفولو noreferrer "> انقر

<وأ href = "http://community.bartdesmet.net/blogs/bart/archive/2008/10/31/c-4-0-feature-focus-part-1-optional-parameters.aspx" يختلط = "نوفولو noreferrer"> انقر

ويبدو أيضا أن مؤلف <لأ href = "http://blogs.msdn.com/samng/archive/2009/02/03/named-arguments-optional-arguments-and-default-values.aspx "يختلط =" نوفولو noreferrer "> هذا المنصب سوف تنشر مقالا في المستقبل القريب على 'لماذا' MS اختارت لتنفيذ بارامس الافتراضي في C #

وهنا هو الجواب لماذا انها لم تقدم في C # http://blogs.msdn.com/csharpfaq/archive/ 2004/03/07 / 85556.aspx

وعيب واحد مع تنفيذ المعلمة الافتراضية في C # 4.0 هو أنه يخلق تبعية على اسم المعلمات. هذه موجودة بالفعل في VB، الذي يمكن أن يكون أحد الأسباب لماذا اختاروا لتنفيذ ذلك في 4.0.

وعيب آخر هو أن القيمة الافتراضية تعتمد على الطريقة التي يلقي الكائن. يمكنك أن تقرأ عنها هنا: <لأ href = "http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html" يختلط = " نوفولو noreferrer "> http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html .

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