الوراثة واجهات التعداد
-
10-07-2019 - |
سؤال
إذا لديك مجموعة من الفئات التي تقوم بتنفيذ كل واجهة.
interface IMyinterface<T>
{
int foo(T Bar);
}
وأريد أن يشق كل منهم في قائمة وتعداد من خلالهم.
List<IMyinterface> list
foreach(IMyinterface in list)
// etc...
ولكن المترجم يريد أن يعرف ما هو T. هل يمكنني فعل هذا؟ كيف أتغلب على هذه المسألة؟
المحلول
وليس هناك نوع IMyinterface لا يوجد سوى نوع IMyinterface`1 التي سوف تتطلب وسيطة نوع. هل يمكن خلق نوع IMyinterface: -
interface IMyinterface { ... }
وثم ترث منه
interface IMyinterface<T> : IMyinterface { ... }
وأنت في حاجة لنقل أي أعضاء كنت ترغب في استخدامها في حلقة foreach للتعريف IMyinterface.
نصائح أخرى
إذا كنت تخطط لاستدعاء الأسلوب مع T في التوقيع، والجواب هو أنك لا تستطيع ذلك. خلاف ذلك يمكنك القيام به كما يقترح anthonywjones
وأنت لا تزال بحاجة لنقول للمترجم ما T هو في بعض الوقت، ولكن فقط ما طلبتم يمكن القيام به:
interface IMyinterface
{
int foo<T>(T Bar);
}
List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
لا تنتمي إلى StackOverflow