OK so I gather that Interfaces are a way to enforce that an object implements a certain amount of functionality, without having to use inheritance. Kind of like a contract.
and it has no implementation as such then whoever uses your interface has to write it from scratch..every time.
Each implementation of the interface can be different. The point is that you can use interface without knowing the implementation. Consider example:
public interface ILogger
{
void WriteMessage(string message);
}
Your application may use ILogger interface for logging errors/debug information, etc. But it doesn't matter how logger is implemented - it can be FileSystemLogger, or DatabaseLogger, or any other implementation. So you will be able to substitute implementations at any time without changing all places in code where logging was mentioned.