Sharing delegate types across scripts

I’m starting to use events and delegates in my script and realised that if I want different scripts to fire different events, I need to declare a delegate type within that script as I’m not really able to use previously declared types in other scripts.

I thought at first that if I wanted to do that I’d need to have a reference to the script that declared the delegate type, have the delegate access type as public and I would need to go Script.DelegateName but it seems that declaring them just public is enough and I can simply use Script.DelegateName without having a reference to the script - as if the delegate type is static or something.

Can someone explain what is going on here - why am I able to do this, does this actually work, is there anything wrong with it, etc?

We use Events and delegates all the time. They are a brilliant way of decoupling scripts/components. Generally speaking, if an event is specific to a script/component I declare the delegate as public within that type. If not, I will declare them in a C# file under a relevant namespace and still public, for example a general UI delegate for being selected could be found in Core.UI.Events. This allows any number of UI scripts to be present and only rely on one Events source file. In a similar way any UI script can be removed. The MSDN example also moves event handlers outside the class declaration. An event handler is basically a structure for a method that an event can call.