ماذا عن معلمات النوع العام الاختياري في C# 5.0؟ [مغلق

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

  •  23-09-2019
  •  | 
  •  

سؤال

مجرد فكرة.

ألن يكون من المفيد أن يكون لديك معلمات نوع اختيارية في C#؟

هذا من شأنه أن يجعل الحياة أكثر بساطة. لقد سئمت من وجود فئات متعددة بنفس الاسم ، لكن معلمات النوع المختلفة. كما لا يدعم VS هذا Vell (أسماء الملفات) :-)

هذا من شأنه على سبيل المثال القضاء على الحاجة إلى عدم جينات غير قابلة للآن:

interface IEnumerable<out T=object>{
  IEnumerator<T> GetEnumerator()
}

ما رأيك؟

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

المحلول

أنا بالتأكيد من أجل ذلك.

أكتب حاليًا أساليب المساعد لسيناريوهات مختلفة حيث أرغب في نقل الإشارات إلى أعضاء وأساليب دروس مختلفة. لإنجاز هذا ، أنا آخذ ، على سبيل المثال ، Expression<Func<TIn, TOut>> كحجة للمساعد (الذي يتيح لي الوصول إلى الطريقة بتعبير Lambda ، وبالتالي الحفاظ على كل شيء مكتوبًا بقوة).

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

HelperMethod<TIn>(Expression<Action<TIn>> arg) // Yes, C# can distinguish
HelperMethod<TOut>(Expression<Func<TOut>> arg) // these two from eachother
HelperMethod<TIn, TOut>(Expression<Func<TIn, TOut>> arg)
HelperMethod<TIn1, TIn2, TOut>(Expression<Func<TIn1, TIn2, TOut>> arg)
// etc

يمكنني أن أفعل ، على الأكثر ، طريقتين:

HelperMethod<TIn>(Expression<Action<TIn>> arg)
HelperMethod<TOut, TIn1 = DummyType, ...>(Expression<Func<TIn1, ..., TOut> arg)

في حالتي ، سوف يتجنب الكثير من تكرار الكود ...

نصائح أخرى

ماذا سيكون الاستخدام الرئيسي لهذه الميزة اللغوية؟ أستطيع أن أرى أنه يمكن أن يساعد في بعض المهام الإدارية مثل أسماء الملفات والكتابة الأقل ، لكن بعد ذلك لا أرى مدى فائدة ذلك.

أيضًا ، من شأن هذه الميزة تعقيد بشكل كبير أي قيود عامة يمكن وضعها على معلمة النوع العام وسيتعين على النوع الافتراضي نفسه أن يعمل كنوع من القيد العام نفسه.

أعتقد أن هذا من شأنه تعقيد اللغة دون تقديم أي فائدة حقيقية للمطور.

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

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

لقد صادفت مؤخرًا قضية كان يمكن أن تستخدم شيئًا كهذا ، ليس تمامًا. كان لدي طريقة تؤدي تحولًا من نوع ما ، بين الفئة A و Astly Class Accild و Class B و Class Bchild. عادةً ما كان الزوج A/ACHILD هو نفسه B/BCHILD ، ولكن في بعض الأحيان كان A فئة قاعدة من B و ACTILD فئة قاعدة من BCHILD.

كان من الجيد أن تكون قادرًا على القول إن المعلمة TB الخاصة بي قد تعرضت للتخلي عن TA ، وأن tbchild تخلفت عن Tachild.

لاحظ أن هذا كان موقفًا كان من الضروري فيه كتابة معلمات النوع ، لأن الاستدلال لن ينجح.

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