SORU
24 EKİM 2008, Cuma


Nasıl yansıması genel bir Yöntemi çağırmak için kullanılır?

Tür parametresi derleme zamanında bilinen değil, ama bunun yerine çalışma zamanında dinamik olarak alındığında genel bir yöntemi çağırmak için en iyi yolu nedir?

Aşağıdaki örnek kodu göz önünde bulundurun - Örneğin içinde() en kısa yolu GenericMethod çağırmak için ne yöntem, () türünü kullanarak myType değişkeninde saklı?

public class Sample
{

    public void Example(string typeName)
    {
        Type myType = FindType(typeName);

        // what goes here to call GenericMethod<T>() ?    
        GenericMethod<myType>(); // This doesn't work

        // what changes to call StaticMethod<T>() ?
        Sample.StaticMethod<myType>(); // This also doesn't work
    }

    public void GenericMethod<T>()
    {   
        ...
    }

    public static void StaticMethod<T>()
    {   
        ...
    }    
}

CEVAP
24 EKİM 2008, Cuma


Yansıması ile başlatmak için bu yöntem, "inşa" türü argümanlar sağlayarak MakeGenericMethod: . o zaman elde etmek için kullanmak gerekir

MethodInfo method = typeof(Sample).GetMethod("GenericMethod");
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);

Statik bir yöntem için, Invoke ilk argüman olarak null pas. Bu genel yöntemler ile ilgisi normal yansıma.

Belirtildiği gibi, bu bir çok C tipi çıkarım kullanabilirsiniz dynamic - # kullanarak 4 gibi daha basit elbette. Tür kesmesi müsait değil, soruyu tam örnek gibi durumlarda yardımcı olmuyor.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • TastyTuts | Creative video tutorials by Gareth David

    TastyTuts |

    6 Temmuz 2011
  • ThePointblank

    ThePointblan

    18 Aralık 2006
  • Truc Minh

    Truc Minh

    23 Ocak 2011