代码之家  ›  专栏  ›  技术社区  ›  FutureCake

引发事件c#给出错误:没有重载匹配委托事件处理程序

  •  0
  • FutureCake  · 技术社区  · 7 年前

    到目前为止,我得到的是:

    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”匹配

    我以前从未处理过事件,但我真的不知道如何解决这个问题。遗憾的是,我也不太理解微软关于事件的文档:(

    如果需要额外的澄清,请让我知道!
    所有的帮助都很感激!

    1 回复  |  直到 7 年前
        1
  •  5
  •   Bizhan    7 年前

    只要改变这个方法。因为你的活动也需要 EventArgs

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

      handler(this, e);
    

    或者,您可以将事件的类型更改为其他类型。例如 Action<System.Object> 如果您不想拥有一个 事件标记 在您的活动中:

    public event System.Action<System.Object> ObjectChange;
    
    void OnBaseObjectChange(System.Object sender)
    {
         Debug.Log("event is raised by element");
    }
    

    你可以这样称呼它:

    handler(this);