示例#1
0
        public MultiDelegate MulticastDelegateCombineInvoke()
        {
            MultiDelegate md1  = md1Field;
            MultiDelegate md2  = md2Field;
            MultiDelegate md3  = md3Field;
            MultiDelegate md4  = md4Field;
            MultiDelegate md5  = md5Field;
            MultiDelegate md6  = md6Field;
            MultiDelegate md7  = md7Field;
            MultiDelegate md8  = md8Field;
            MultiDelegate md9  = md9Field;
            MultiDelegate md10 = md10Field;

            MultiDelegate md = null;

            for (int i = 0; i < InnerIterationCount1000; i++)
            {
                md = (MultiDelegate)Delegate.Combine(md1, md);
                md = (MultiDelegate)Delegate.Combine(md2, md);
                md = (MultiDelegate)Delegate.Combine(md3, md);
                md = (MultiDelegate)Delegate.Combine(md4, md);
                md = (MultiDelegate)Delegate.Combine(md5, md);
                md = (MultiDelegate)Delegate.Combine(md6, md);
                md = (MultiDelegate)Delegate.Combine(md7, md);
                md = (MultiDelegate)Delegate.Combine(md8, md);
                md = (MultiDelegate)Delegate.Combine(md9, md);
                md = (MultiDelegate)Delegate.Combine(md10, md);
            }

            return(md);
        }
示例#2
0
        static void Main(string[] args)
        {
            // Single Cast Delegates
            clsMaths objMaths = new clsMaths();

            PointertoFunction AddPtr = null;

            AddPtr = objMaths.Add;

            int resultAdd = AddPtr.Invoke(1, 2);

            Console.WriteLine("Result Add - {0}", resultAdd);

            PointertoFunction SubPtr = null;

            SubPtr = objMaths.Sub;

            int resultSub = SubPtr.Invoke(2, 1);

            Console.WriteLine("Result Sub - {0}", resultSub);

            //Multicast Delegates
            MultiDelegate MultiPtr = null;

            MultiPtr += objMaths.Addition;
            MultiPtr += objMaths.Substraction;
            MultiPtr.Invoke(3, 1);

            Console.ReadLine();
        }
示例#3
0
 public void AddCommand(Action command)
 {
     Commands += delegate
     {
         command();
     };
 }
示例#4
0
    public void MulticastDelegateCombineInvoke()
    {
        MultiDelegate md  = null;
        Object        obj = new Object();

        foreach (var iteration in Benchmark.Iterations)
        {
            MultiDelegate md1  = new MultiDelegate(this.Invocable2);
            MultiDelegate md2  = new MultiDelegate(this.Invocable2);
            MultiDelegate md3  = new MultiDelegate(this.Invocable2);
            MultiDelegate md4  = new MultiDelegate(this.Invocable2);
            MultiDelegate md5  = new MultiDelegate(this.Invocable2);
            MultiDelegate md6  = new MultiDelegate(this.Invocable2);
            MultiDelegate md7  = new MultiDelegate(this.Invocable2);
            MultiDelegate md8  = new MultiDelegate(this.Invocable2);
            MultiDelegate md9  = new MultiDelegate(this.Invocable2);
            MultiDelegate md10 = new MultiDelegate(this.Invocable2);

            using (iteration.StartMeasurement())
            {
                md = (MultiDelegate)Delegate.Combine(md1, md);
                md = (MultiDelegate)Delegate.Combine(md2, md);
                md = (MultiDelegate)Delegate.Combine(md3, md);
                md = (MultiDelegate)Delegate.Combine(md4, md);
                md = (MultiDelegate)Delegate.Combine(md5, md);
                md = (MultiDelegate)Delegate.Combine(md6, md);
                md = (MultiDelegate)Delegate.Combine(md7, md);
                md = (MultiDelegate)Delegate.Combine(md8, md);
                md = (MultiDelegate)Delegate.Combine(md9, md);
                md = (MultiDelegate)Delegate.Combine(md10, md);
            }
        }

        md(obj, 100, 100);
    }
示例#5
0
    public void MulticastDelegateCombineInvoke()
    {
        MultiDelegate md = null;
        Object obj = new Object();

        foreach (var iteration in Benchmark.Iterations)
        {
            MultiDelegate md1 = new MultiDelegate(this.Invocable2);
            MultiDelegate md2 = new MultiDelegate(this.Invocable2);
            MultiDelegate md3 = new MultiDelegate(this.Invocable2);
            MultiDelegate md4 = new MultiDelegate(this.Invocable2);
            MultiDelegate md5 = new MultiDelegate(this.Invocable2);
            MultiDelegate md6 = new MultiDelegate(this.Invocable2);
            MultiDelegate md7 = new MultiDelegate(this.Invocable2);
            MultiDelegate md8 = new MultiDelegate(this.Invocable2);
            MultiDelegate md9 = new MultiDelegate(this.Invocable2);
            MultiDelegate md10 = new MultiDelegate(this.Invocable2);

            using (iteration.StartMeasurement())
            {
                md = (MultiDelegate)Delegate.Combine(md1, md);
                md = (MultiDelegate)Delegate.Combine(md2, md);
                md = (MultiDelegate)Delegate.Combine(md3, md);
                md = (MultiDelegate)Delegate.Combine(md4, md);
                md = (MultiDelegate)Delegate.Combine(md5, md);
                md = (MultiDelegate)Delegate.Combine(md6, md);
                md = (MultiDelegate)Delegate.Combine(md7, md);
                md = (MultiDelegate)Delegate.Combine(md8, md);
                md = (MultiDelegate)Delegate.Combine(md9, md);
                md = (MultiDelegate)Delegate.Combine(md10, md);
            }
        }

        md(obj, 100, 100);
    }
    void Start()
    {
        multiDelegate += Print1;
        multiDelegate += Print2;

        multiDelegate();
    }
示例#7
0
文件: Program.cs 项目: Serhej/study
        static void Main(string[] args)
        {
            // Создаётся массив
            int[] array1 = { -2, 17, 23, 6, -5, 14, 0, -11, -2 };

            // Создаётся делегат, в него записывается метод ShowArray
            // *Конкретный тип для обобщённого метода определяется автоматически
            // На основании типов делегата
            MultiDelegate multigate = ArrayUtils.ShowArray;

            // А затем к делегату добавляются другие методы
            multigate += ArrayUtils.ShowAvg;
            // В том порядке, в котором они добавляются
            multigate += ArrayUtils.ShowMax;
            // Они и будут вызываться
            multigate += ArrayUtils.ShowMin;
            multigate += ArrayUtils.ShowNormalize;

            // Вызов делегата запускает цепочку вызовов
            // Всех записанных в него методов
            multigate(array1);
            Console.WriteLine();

            // Из делегата удаляются некоторые методы
            multigate -= ArrayUtils.ShowMin;
            multigate -= ArrayUtils.ShowMax;
            multigate -= ArrayUtils.ShowAvg;

            // Делегат вызывается снова
            // Теперь будут выполнены лишь оставшиеся методы
            multigate(array1);
        }
示例#8
0
 // Start is called before the first frame update
 void Start()
 {
     myMultiDelegate += PowerUp;
     myMultiDelegate += TurnRed;
     if (myMultiDelegate != null)
     {
         myMultiDelegate();
     }
 }
示例#9
0
    // Start is called before the first frame update
    void Start()
    {
        cellSizeAllyUnitsPositions = (rightMostPosition.x - leffMostPosition.x) / (_maxAllyUnits - 1);
        allyUnits  = new List <Unit>();
        enemyUnits = new List <Unit>();


        updateDelegate += _IANormal.UpdateIA;
    }
示例#10
0
        static void Main1(string[] args)
        {
            Sampleclass   sc  = new Sampleclass();
            MultiDelegate del = Sampleclass.Add;

            del += Sampleclass.Sub;
            del += Sampleclass.Mul;
            del(10, 5);
            Console.ReadLine();
        }
    public void OnGUI()
    {
        myMultiDelegate += PowerUp;
        myMultiDelegate += TurnRed;

        if (myMultiDelegate != null)
        {
            myMultiDelegate();
        }
    }
示例#12
0
        public void MulticastDelegateInvoke(int length)
        {
            MultiDelegate md  = length == 100 ? md100Field : md1000Field;
            Object        obj = objField;

            for (int i = 0; i < InnerIterationCount10000; i++)
            {
                md(obj, 100, 100);
            }
        }
示例#13
0
    void Awake()    //eseguito all'inizio prima di start() e indipendentemente dal fatto che lo script component sia abilitato o meno
    {
        floorMask       = LayerMask.GetMask("Terrain");
        anim            = GetComponent <Animator>();
        playerRigidbody = GetComponent <Rigidbody>();
        position        = GetComponent <Transform>();

        playerActions += Move;
        playerActions += Animate;
    }
    void Start()
    {
        multiDelegate = multiDelegate + PowerUp + TurnRed;
        multiDelegate();

        if (multiDelegate != null)
        {
            multiDelegate -= PowerUp;
            multiDelegate += TurnBlue;
            multiDelegate();             // 格納した順に実行されるので青色に上書きされる
        }
    }
    void Start()
    {
        myMultiDelegate += PowerUp;     // assign PowerUp method to the delegate
        myMultiDelegate += TurnRed;     // assign TurnRed method to the same delegate

        if(myMultiDelegate != null)     // avoid errors by checking for unassigned delegate
        {
            myMultiDelegate();          // call the multi-delegate
        }

        myMultiDelegate -= PowerUp;     // unassign PowerUp method from delegate
        myMultiDelegate -= TurnRed;     // unassign TurnRed method from delegate
    }
示例#16
0
    MultiDelegate myMultiDelegate;      // member variable of type MultiDelegate


    void Start()
    {
        myMultiDelegate += PowerUp;     // assign PowerUp method to the delegate
        myMultiDelegate += TurnRed;     // assign TurnRed method to the same delegate

        if (myMultiDelegate != null)    // avoid errors by checking for unassigned delegate
        {
            myMultiDelegate();          // call the multi-delegate
        }

        myMultiDelegate -= PowerUp;     // unassign PowerUp method from delegate
        myMultiDelegate -= TurnRed;     // unassign TurnRed method from delegate
    }
示例#17
0
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            myMultiDelegate += PowerUp;
            myMultiDelegate += TurnRed;
        }

        if (myMultiDelegate != null && Input.GetMouseButtonDown(0))
        {
            myMultiDelegate();
        }
    }
示例#18
0
 public void SetupMulticastDelegateCombineInvoke()
 {
     md1Field  = new MultiDelegate(this.Invocable2);
     md2Field  = new MultiDelegate(this.Invocable2);
     md3Field  = new MultiDelegate(this.Invocable2);
     md4Field  = new MultiDelegate(this.Invocable2);
     md5Field  = new MultiDelegate(this.Invocable2);
     md6Field  = new MultiDelegate(this.Invocable2);
     md7Field  = new MultiDelegate(this.Invocable2);
     md8Field  = new MultiDelegate(this.Invocable2);
     md9Field  = new MultiDelegate(this.Invocable2);
     md10Field = new MultiDelegate(this.Invocable2);
 }
示例#19
0
        public void SetupMulticastDelegateInvoke()
        {
            objField = new Object();

            for (long i = 0; i < 100; i++)
            {
                md100Field = (MultiDelegate)Delegate.Combine(new MultiDelegate(this.Invocable2), md100Field);
            }

            for (long i = 0; i < 1000; i++)
            {
                md1000Field = (MultiDelegate)Delegate.Combine(new MultiDelegate(this.Invocable2), md1000Field);
            }
        }
示例#20
0
        static void Main(string[] args)
        {
            Console.WriteLine("***A case study with a multicast delegate when we target non-void methods.***");
            // Target MethodOne
            MultiDelegate multiDel = MethodOne;

            // Target MethodTwo
            multiDel += MethodTwo;
            // Target MethodThree
            multiDel += MethodThree;
            int finalValue = multiDel();

            Console.WriteLine("The final value is {0}", finalValue);
            Console.ReadKey();
        }
    void Start()
    {
        // You can concatenate the methods by
        // using '+=' to delegate.
        myMultiDelegate += PowerUp;
        myMultiDelegate += TurnRed;

        // This is a safe way to check if
        // there are any methods stored in delegate
        // before executing the delegate.
        if (myMultiDelegate != null)
        {
            myMultiDelegate();
        }
    }
示例#22
0
    public void MulticastDelegateInvoke(int length)
    {
        MultiDelegate md  = null;
        Object        obj = new Object();

        for (long i = 0; i < length; i++)
        {
            md = (MultiDelegate)Delegate.Combine(new MultiDelegate(this.Invocable2), md);
        }

        foreach (var iteration in Benchmark.Iterations)
        {
            using (iteration.StartMeasurement())
                md(obj, 100, 100);
        }
    }
示例#23
0
    void Start()
    {
        myDelegate = PrintNum;
        myDelegate(50);

        myDelegate = DoubleNum;
        myDelegate(50);

        //Stackar metodos
        myMultiDelegate += PowerUp;
        myMultiDelegate += TurnRed;

        if (myMultiDelegate != null)
        {
            myMultiDelegate();
        }
    }
示例#24
0
        public static void Main()
        {
            DelegateClass obj = new DelegateClass(); // 클래스 객체 생성
            MultiDelegate dg1, dg2, dg3;             // 델리게이트 선언

            dg1 = new MultiDelegate(obj.MethodA);    // 델리게이트 객체 생성
            dg2 = new MultiDelegate(obj.MethodB);    // 델리게이트 객체 생성
            dg3 = new MultiDelegate(obj.MethodC);    // 델리게이트 객체 생성
            // ...
            dg1  = dg1 + dg2;                        // 메소드 추가
            dg1 += dg3;                              // 메소드 추가
            dg2  = dg1 - dg2;                        // 메소드 제거
            dg1();
            Console.WriteLine("After dg1 call ...");
            dg2();
            Console.WriteLine("After dg2 call ...");
            dg3();
        }
示例#25
0
        static void Main(string[] args)
        {
            Console.WriteLine("***Example of a Multicast Delegate.***");
            // Target a static method
            MultiDelegate multiDel = MethodOne;

            // Target another static method
            multiDel += MethodTwo;
            //Target an instance method
            multiDel += new OutsideProgram().MethodThree;
            multiDel();
            //Reducing the delegate chain
            Console.WriteLine("\nReducing the length of delegate chain by discarding MethodTwo now.");
            multiDel -= MethodTwo;
            //The following invocation will call MethodOne and MethodThree now.
            multiDel();
            Console.ReadKey();
        }
示例#26
0
 private void Start()
 {
     myDelegate += PowerUp;
     myDelegate += TurnRed;
     myDelegate();
 }
示例#27
0
 public void AddObject(StoppableObject stoppableObject)
 {
     myMultiDelegate += stoppableObject.SwitchOnOrOff;
 }
示例#28
0
 public void RemoveObject(StoppableObject stoppableObject)
 {
     myMultiDelegate -= stoppableObject.SwitchOnOrOff;
 }