Пример #1
0
        static void Main(string[] args)
        {
            Ember emb1 = new Ember("HeHe", 30);
            Ember emb2 = new Ember("HeHeHe", 40);


            // nyitott delegate static metódusra: --------------------------------------------------
            Fuggveny1 fu1 = DoSomething;

            Console.WriteLine(fu1(emb1.Eletkor, emb1.Nev));

            // nyitott delegate static metódusre CreateDelegate-tel:--------------------------------
            MethodInfo[] mis = typeof(Program).GetMethods();
            Fuggveny2    fu2 = (Fuggveny2)Delegate.CreateDelegate(typeof(Fuggveny2), mis[1]);

            Console.WriteLine(fu2(emb1));


            // zárt delegate példány metódusra:-----------------------------------------------------
            Fuggveny3 fu3 = emb2.DoSomething;

            Console.WriteLine(fu3());


            // methodinfo hívás mindig más objektumra: --------------------------------------------
            MethodInfo            mi1 = typeof(Ember).GetMethod("DoSomething"); // ez lassú a reflection miatt, de futásközben gyorasabb leht, nem kell mindig új delegate-et létrehozni
            Func <object, object> fu4 = o => mi1.Invoke(o, null);

            Console.WriteLine(fu4(emb2));


            // nyitott delegate példány metódusra: -------------------------------------------------
            MethodInfo mi2 = typeof(Ember).GetMethod("DoSomething3");
            Fuggveny4  fu5 = (Fuggveny4)Delegate.CreateDelegate(typeof(Fuggveny4), null, mi2);  // itt meg kell adni a null -objektumot is!!!! A delegate signatúrájában benne van az ember, híváskor viszont nem kell megadni!!!

            Console.WriteLine(fu5(emb2, 10));


            Console.ReadKey();
        }
Пример #2
0
 public static int DoSomething(Ember ember)
 {
     return(ember.Nev.Length + ember.Eletkor);
 }