سؤال

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

والجزء الذي هو التعثر لي هو أن المنشط يعود إليكم <م> المثال من وجوه، في حين أن فئة ثابتة ليس لها مثيل. هل هذا ممكن؟

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

المحلول

وأنت لا تحتاج إلى المنشط استدعاء الأسلوب. يمكنك استخدام MethodInfo.Invoke مباشرة. المعلمة الأولى يمكن أن تترك فارغة.

نصائح أخرى

وGVS هو الصحيح - وهنا مثال على الاستخدام:

using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        Type type = Type.GetType("Foo");
        MethodInfo info = type.GetMethod("Bar");

        Console.WriteLine(info.Invoke(null, null));
    }
}

static class Foo
{
    public static String Bar() { return "Bar"; }
}

وأحد الأمثلة أكثر باستخدام MethodInfo.Invoke

Type myStaticClassType = Type.GetType("MyStaticClassNameSpace",true);
object[] myStaticMethodArguments = {object1,object2...};
MethodInfo myStaticMethodInfo = myStaticClassType.GetMethod("YourMethod");
var myStaticMethodResult = myStaticMethodInfo.Invoke(null,myStaticMethodArguments);

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

إذا ما تعنيه بقولها "الموارد" في موارد الواقع جزءا لا يتجزأ من التجمع، يمكنك استخراجها دائما يدويا (انظر Assembly.GetManifestResourceStream())، من دون استخدام الطبقات ثابتة (سوف يكون هناك المزيد من المشاكل مع تلك منذ الطريقة الوحيدة التي يمكن استخدامها هو محض مع انعكاس).

وSpring.NET لديها لطيفة IResource التجريد.

ولا، Activator لا يمكن استخدام "لخلق" الطبقات ثابتة.

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