Differences between tight coupling and loose coupling in C#
Tight coupling means classes and objects are dependent on one another. In general, tight coupling is usually not good because it reduces the flexibility and re-usability of the code while Loose coupling means reducing the dependencies of a class that uses the different class directly.
In general, Tight Coupling is bad in but most of the time, because it reduces flexibility and re-usability of code, it makes changes much more difficult, it impedes test ability etc. Loose coupling is a better choice because a loosely coupled will help you when your application need to change or grow.
Tight coupling
The tightly coupled object is an object that needs to know about other objects and is usually highly dependent on each other's interfaces.
In the small applications, we can easily identify the changes and there is less chance to miss anything. But in large applications, these inter-dependencies are not always known by every programmer and there is a chance of overlooking changes.
Loose coupling
A loosely coupled system is one in which each of its components has, or makes use of, little or no knowledge of the definitions of other separate components. Subareas include the coupling of classes, interfaces, data, and services.
Loose coupling is a much more generic concept intended to increase the flexibility of a system, make it more maintainable, and makes the entire framework more "stable".
Being loosely coupled enables you to keep moving forward, adding features, fixing bugs, etc.
We can make a tight coupling system into loose coupling by injecting their dependecies (here DI introduced). We need a managing class that will produce an instance via an interface.
To know more about Dependency Injection, please click here.