سؤال

باستخدام التفكير في .صافي, ما هو فرق بين:

   if (foo.IsAssignableFrom(typeof(IBar)))

و

   if (foo.GetInterface(typeof(IBar).FullName) != null)

الذي هو أكثر ملاءمة ، لماذا ؟

عندما يمكن أن واحدة أو أخرى تفشل ؟

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

المحلول

إذا كنت ترغب فقط في معرفة ما إذا كان نوع تنفذ معين واجهة, إما بخير على الرغم من GetInterface() هو على الارجح أسرع منذ IsAssignableFrom() لا أكثر الداخلية الشيكات من GetInterface().ربما حتى أسرع إلى التحقق من النتائج من نوع.GetInterfaces() والتي ترجع نفس اللائحة الداخلية أن كل الطرق الأخرى استخدام على أي حال.

نصائح أخرى

هناك فرق في كيفية الطبقات الداخلية التعامل معها.اتخاذ الطبقة التالية:

public interface IFoo
{
}    

internal class Foo: IFoo
{
}

هذا وسوف أعطيك قائمة من بند واحد:

var types = typeof(IFoo).Assembly.GetTypes()
            .Where(x => x.GetInterface(typeof(IFoo).FullName) != null)
            .ToList();

في حين أن هذا سوف تعطيك قائمة فارغة:

var types = typeof(IFoo).Assembly.GetTypes()
            .Where(x => x.IsAssignableFrom(typeof(IFoo))
            .ToList();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top