SORU
4 ŞUBAT 2010, PERŞEMBE


Parametrelerle Yöntemi Çağırmak için Nasıl yansıması:

Parametreleri ile yansıma yoluyla bir yöntemi çağırmak için çalışıyorum ve ben "hedef nesne türü eşleşmiyor". Ben bir parametre olmadan bir yöntemi çağırmak gayet iyi çalışıyor. Yöntem Test ararsam aşağıdaki kodu dayalı ("") TestNoParameters gayet iyi çalışıyor. Ancak eğer Test ararsam ("") Çalıştırmak için bir istisna var. Ben yanlış kod ile mi?

İlk amacım nesneleri public void Çalıştır örneğin, bir dizi geçmesi oldu(object[] options) ama bu işe yaramadı ve başarı olmadan daha basit bir şey örneğin dize çalıştım.

//Assembly1.dll
namespace TestAssembly
{
    public class Main
    {
        public void Run(string parameters)
        { 
            // Do something... 
        }
        public void TestNoParameters()
        {
            // Do something... 
        }
    }
}

//Executing Assembly.exe
public class TestReflection
{
    public void Test(string methodName)
    {
        Assembly assembly = Assembly.LoadFile("...Assembly1.dll");
        Type type = assembly.GetType("TestAssembly.Main");
        if (type != null)
        {
            MethodInfo methodInfo = type.GetMethod(methodName);
            if (methodInfo != null)
            {
                object result = null;
                ParameterInfo[] parameters = methodInfo.GetParameters();
                object classInstance = Activator.CreateInstance(type, null);
                if (parameters.Length == 0)
                {
                    //This works fine
                    result = methodInfo.Invoke(classInstance, null);
                }
                else
                {
                    object[] parametersArray = new object[] { "Hello" };

                    //The invoke does NOT work it throws "Object does not match target type"             
                    result = methodInfo.Invoke(methodInfo, parametersArray);
                }
            }
        }
    }
}

CEVAP
4 ŞUBAT 2010, PERŞEMBE


Değişiklik "" "" gibi boş parametre dizisi ile. çağrı classİnstance için methodınfo

  result = methodInfo.Invoke(classInstance, parametersArray);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 0TACTICAL0HIPPY0

    0TACTICAL0HI

    30 EYLÜL 2012
  • PC Learning Zone - Computer Training

    PC Learning

    8 EYLÜL 2006
  • Sparta Spartanutul

    Sparta Spart

    18 HAZİRAN 2013