سؤال

وأود أن تكون قادرة على القيام سومثينغ كما يلي:

//non-generic
var MyTable = new Table();
string name = MyTable.Name;
IEnumerable<String> rows = MyTable.Rows;

//generic
var MyTableGeneric = new Table<MyType>();
string name = MyTableGeneric.Name;
IEnumerable<MyType> rows = MyTableGeneric .Rows;

وليت شيئا من هذا القبيل يكون لمن ذلك بكثير:

http://img81.imageshack.us/img81/427/diagramcm3.jpg

وأو هذا من شأنه أن يكون أفضل:

http://img301.imageshack.us/img301/4136/presentation1nh9.jpg

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

وعذرا لبلدي الرسوم البيانية كربي، المحرز في باور بوينت:)

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

المحلول

وانا اقول التصميم الثاني هو أفضل. أقل العناصر وأسهل طريق الميراث.

وأول تصميم واجهات لا لزوم لها، والتي لا تحتاج حقا إلا إذا كنت تنفيذ شيء آخر والتي تطبق الواجهة، ولكن لا يرث من الفئة الأساسية.

نصائح أخرى

ما الفرق betweeen وعلى Table وTable<string>؟ وبعبارة أخرى، لا يمكنك فقط استخدام Table<string> كشكل nongeneric بك؟

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

وكم السلوك ونوع Table لديك فعلا؟ لو كان في الحقيقة مجرد وعاء، قد لا تحتاج واجهة - ولكن إذا كان لديه منطق كبير وراء ذلك، قد تريد أن يكون واجهة بحيث يمكنك يسخر من الجدول عند اختبار الطبقة التي يستخدمها

وأود أن استخدام الأدوية في الصفوف، دون إشراك السلسلة في الفئة الأساسية، ويكون وراثة غير عام الطبقة الجدول. النظر في عدم استخدام فئة مجردة.

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