are delegates just a means of ensuring the correct amount of paramters and the correct types are passed to a method at compile time rather than an error been thrown at runtime if delegates were not used?