Composition and Aggregation are the most confusing terms in OOPS. These 2 specifies relations between classes.
Introduction
Composition and Aggregation is most commonly used relations in class diagram. But many people gets confused with these 2 and some times even confused to implement the relations. The most simple thing about these is about the relations and life time of the object.
Composition
Lets take a simple example of Cycle. Cycle should contain 2 tyres and if we convert it to logical model below is the UML diagram

The above UML describes that Cycle contains 2 Tyres and the life time of each Tyre is maintained by Cycle. It is like "
Tyre is Part Of Cycle". Let us see how it can be implemented in C#.
public class Tyre
{
. . .
}
public class Cycle
{
Tyre[] tires = new Tyre[]{new Tyre(), new Tyre()};
.......
}
Aggregation
On the other hand aggregation relation just represents reference between classes. For example consider Employee and contact information. Blow diagram represents the UML

The above UML describes Aggregation relation which mentions that Employee refers to Address. And life time of Address is not managed by Employee. It is like
"Employee has a Address". Let us see how it can be implemented in C#.
public class Address
{
. . .
}
public class Employee
{
private Address address;
public Employee(Address address)
{
this.address = address;
}
. . .
}
Conclusion
Composition and Aggregation are important part of classes designs but most of the OOPS concepts are rounded with fundamentals only which doesn't describes about these relations.