c # делегат -> машинопись - PullRequest
0 голосов
/ 31 октября 2018

код C #

enum myEnum
{
    aa = 0,
    bb,
    cc,
}

public delegate void MyDelegate(myEnum _myEnum, params object[] _params);

public Dectionary<myEnum , MyDelegate> dicMyDelegate = new Dectionary<myEnum , MyDelegate>();

public void GameDelegate(myEnum _myEnum, MyDelegate _Func)
{
    if(dicMyDelegate .ContainsKey(_myEnum))
    {
        MyDelegate Func;
        dicMyDelegate.TryGetValue(_myEnum, out Func);
        Func += _Func;
    }
    else
    {
        dicMyDelegate.Add(_myEnum, _Func);
    }
}

public void GameCallBack(myEnum _myEnum)
{
    if(!dicMyDelegate.ContainsKey(_myEnum)) return;
    MyDelegate Func;
    dicMyDelegate.TryGetValue(_myEnum, out Funk);
    if(Func == null) return;
    Func(_myEnum);
}

=============================================== ===

создатель кокосов TypeScript. я не знаю .... плз. я сейчас учусь.

public delegate void MyDelegate(myEnum _myEnum, params object[] _params);

public Dectionary<myEnum , MyDelegate> dicMyDelegate = new Dectionary<myEnum , MyDelegate>();

Трудно заменить приведенный выше код сценарием типа.

Я ищу в интернете весь день.

declare module "Delegate"
{   
    export function MyDelegate(_myEnum: myEnum , args: any[]) : void;
}

import {MyDelegate} from 'Delegate';

1 Ответ

0 голосов
/ 31 октября 2018

В JavaScript и TypeScript функции являются гражданами первого класса, поэтому вам не нужно решать проблему так же, как в C #.

function example(name: string) : string {
    return 'Hello ' + name;
}

function acceptsFunction(func: Function) {
    // Calling the function that was passed as an argument
    const result = func('Steve');
    console.log(result);
}

// Calling a function, passing another function as an argument
acceptsFunction(example);

В приведенном выше примере вы можете передать функцию в качестве аргумента и вызывать ее с аргументами - и все это без дополнительных сложностей.

Вы можете улучшить безопасность типов, указав, какой вид функции должен быть передан:

function acceptsFunction(func: (name: string) => string) {
...