Feeds:
Posts
Comments

Posts Tagged ‘C3918’

Compile Error C3918

In C#, we can check if an event variable is null before firing the event. For example:

public class MyClass
{
    public event EventHandler MyEvent;

    public void FireEvent()
    {
        // Check if there is any event handler registered.
        if (MyEvent != null)
        {
            MyEvent(this, new EventArgs());
        }
    }
}

But if we do the same thing in C++/CLI, we will get an compile error C3918.

ref class MyClass
{
public:
    event EventHandler^ MyEvent;

    void FireEvent()
    {
        if(MyEvent != nullptr) // C3918
        {
            MyEvent(this, gcnew EventArgs());
        }
    }
}

Here is the solution:

public ref class MyClass
{
    EventHandler^ m_myEvent;

public:
    event EventHandler^ MyEvent
    {
        void add(EventHandler^ handler)
        {
            m_myEvent += handler;
        }

        void remove(EventHandler^ handler)
        {
            m_myEvent -= handler;
        }

        void raise(Object^ sender, EventArgs^ e)
        {
            // Check if there is any event handler registered.
            if (m_myEvent != nullptr) 
            {
                m_myEvent->Invoke(sender, e);
            }
        }
    }
};

Read Full Post »