أفضل مصدر لتعلم الأدوية العامة .NET؟[مغلق]

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

  •  01-07-2019
  •  | 
  •  

سؤال

لم أستخدم مطلقًا أيًا من أدوية .NET العامة في عملي، ولكنني أدرك أنها تحظى بشعبية كبيرة.هل لدى أي شخص أي روابط جيدة أو اقتراحات كتب لتعلمها؟على سبيل المكافأة؛أنا أفهم فقط بشكل غامض ما هي مجموعات .NET العامة وماذا تفعل... هل لدى أي شخص أي أمثلة عملية عن كيفية استخدامها لتحقيق فائدة أكبر من المجموعات العادية في .NET؟

نصائح أخرى

الاختيار الواضح..

MSDN C # الأدوية العامة

CLR عبر C# بقلم Jeffrey Richter يتعمق في الأدوية العامة، وهو أحد الموارد التي لا تقدر بثمن والتي يجب على كل مطور .NET أن يمتلكها ويقرأها.

إذا كنت قد استخدمت قوالب C++ من قبل، فإن الأدوية العامة لـ .Net هي نفس الشيء تقريبًا.حتى أنهم يستخدمون بناء جملة <T> مشابهًا.

حتى لو كنت لا تعرف أي لغة C++، فمن المحتمل أنك تجعل هذا الأمر أصعب مما تحتاج إليه، خاصة فيما يتعلق بالمجموعات.إنها مثل أي مجموعة أخرى، ولكن عندما تقوم بإنشائها فإنك توفر اسم نوع داخل <<> حتى يعرف المترجم نوع العنصر الذي يحتفظ به.

يعد C# 3.0 in a Nutshell كتابًا مرجعيًا رائعًا يحتوي على أمثلة كبيرة بما يكفي لاستيعاب المفهوم دون الشعور بالتضخم.

لقد وجدت WROX's Professional .NET 2.0 Generics مفيدًا جدًا لأنه يحتوي على الكثير من الأمثلة الواقعية.يمكن أن تكون الأدوية العامة مربكة للمبتدئين ولكنها يمكن أن تكون أداة مفيدة جدًا/قوية/موفرة للوقت في أيدي مطور ذي خبرة.أنا شخصياً أجد أن .NET Generics مفيد للغاية في تبسيط تعريف المجموعات واستخدامها.كما يمكن أن يؤدي استخدام الأدوية العامة إلى تعليمات برمجية أكثر كفاءة لأنه قد يقلل من أداء الأداء المرتبط عادةً بتحويلات نوع الملاكمة/إلغاء الملاكمة.

من الأفضل متابعة بعض تدريبات Microsoft حول هذا الموضوع.إذا كنت تبحث عن الكتب، سيكون ما يلي مثاليًا:

http://www.microsoft.com/MSPress/books/9469.aspx

تصويتي هو - في الغالب يمكنك تجنبها :)

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

إذا كان الإرسال يزعجك كثيرًا، فربما حان الوقت لكي تفكر في اللغات الديناميكية مثل IronPython :)

و- إذا صادفت بالفعل سيناريو تعتقد أنه منطقي بشكل عام، فانشره كسؤال آخر، يمكن للعقول هنا أن تنظر معًا وتحله كل حالة على حدة :)

تحديث:نعم، يعد التحقق من المترجم أمرًا رائعًا، ولكن تحقق من مصدر Castle Project، يمكنك رؤية العديد من المواقف التي يدخل فيها النوع العام في الطريق لأنك لا تستطيع القيام بالإرسال - يعد صنع أشياء مثل IBusinessObject أكثر مرونة من BusinessObject - لأنك لا تستطيع ذلك قم بإرسال شيء موروث من BusinessObject مرة أخرى إلى BusinessObject ويتوقع الوصول إلى الوظيفة الموروثة.عادةً ما أرى الكود ينتهي بـ BusinessObjectBase -> BusinessObject -> صفك الفعلي.لهذا السبب، أشعر نوعًا ما أنه ليس من المفيد دائمًا استخدام الأدوية العامة، وكنت واحدًا من أولئك الذين أساءوا استخدام هذا التطبيق وانتهى بهم الأمر بالحصول على الكثير من الوظائف المضحكة مع الكتابة العامة، وهي ليست لطيفة على الإطلاق.

التحديث رقم 2:Boxing/Unboxing يعني فقط الحاجة إلى إرسال الكائن عند استخدام نوع مجرد (مثل الكائن) لتخزين القيمة واستخدام قيمة مكتوبة قوية لتخزينه مرة أخرى (وهو ما يتطلب الإرسال)، ولا يوجد فرق كبير يمكنني رؤيته بصرف النظر عن الحالة جمع ذكرت.ورمز مثل هذا لا يزال يفعل الملاكمة:

public T GetValue<T>() {
  return (T) ...;
}

هذا هو الإساءة العامة التي رأيتها في أغلب الأحيان.يعتقد الناس أنهم يتعاملون مع النوع الأصلي هنا، في الواقع ليسوا كذلك.بدلاً من ذلك، يقومون فقط بإجراء عملية الصب في بناء الجملة العام.ما هو منطقي حقا هو هذا:

public class MyList<T>
{
  private List<T> _list;
...
public T GetValue(int index)
{
  return _list[index];
}

ثم نعود مرة أخرى إلى مخزن مجموعتنا.لهذا السبب قلت بعد تخزين المجموعة، لا أرى الكثير من الفرص للمساعدة العامة.تمت الإشارة إليه من هذا البرنامج التعليمي:http://en.csharp-online.net/Understanding_Generics—Revisiting_Boxing_and_Unboxing

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