Возникновение события c # выдает ошибку: нет перегрузки соответствует делегату EventHandler - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь сделать событие, которое возникает, когда что-то происходит.Таким образом, другие классы, которые содержат ссылку на класс, вызвавший событие, получают уведомление.Это то, что я получил до сих пор:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DropArea : MonoBehaviour {

    public event EventHandler ObjectChange;

    void Start () {
    }

    // Update is called once per frame
    void Update () {
    }

    void OnTriggerEnter(Collider other)
    {
        var correctType = FindParentWithComponent(other.gameObject);
        if (correctType != null)
        {
            var cc = correctType.GetComponent<Object_properties>();
            if(cc.VariableTypeSelector == AcceptedVariableType)
            {
                DetectedObjectChange(null); // here i want to raise the event
            }
        }
    }

    protected virtual void DetectedObjectChange(EventArgs e)
    {
        EventHandler handler = ObjectChange;
        if (handler != null)
        {
            handler(this, e );
        }
    }  
}

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

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class IfStatement : MonoBehaviour {

    public DropArea Base, Check, Increment;

    void Start()
    {
        Base.ObjectChange += OnBaseObjectChange; //this line gives me an error so i cant compile. 
    }

    // Update is called once per frame
    void Update () {

    }

    void OnBaseObjectChange(System.Object sender)
    {
        Debug.Log("event is raised by element");
    }
}

это ошибка, которую я получаю:

Нет перегрузки для 'OnBaseObjectChange' соответствует делегату 'EventHandler'

Я никогда раньше не работал с событиями, но я не могу понять, как это исправить.К сожалению, я также не совсем понимаю документы Microsoft о событиях :(

Если требуется дополнительное разъяснение, пожалуйста, дайте мне знать!
Вся помощь действительно оценена!

1 Ответ

0 голосов
/ 25 декабря 2018

Просто измените этот метод.Поскольку ваше мероприятие также требует EventArgs

void OnBaseObjectChange(System.Object sender, EventArgs e)
{
    Debug.Log("event is raised by element");
}

Делегаты хранят подписи методов.Как видите, у вашего события есть метод с двумя параметрами.Попытка использовать его с одним параметром вызывает ошибку.

  handler(this, e);

Кроме того, вы можете изменить тип вашего события на что-то другое.Например, Action<System.Object> для сохранения текущей подписи вашего метода-обработчика, если вы не хотите, чтобы в вашем событии был EventArgs:

public event System.Action<System.Object> ObjectChange;

void OnBaseObjectChange(System.Object sender)
{
     Debug.Log("event is raised by element");
}

Где вы можете вызвать его как:

handler(this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...