# Inversion of Control in .NET: an example of the use of IComparable

```using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// WeirdInteger defines a custom sort order where
// negative numbers are bigger than positive ones.
WeirdInteger[] ary = new WeirdInteger;
ary = new WeirdInteger(-1);
ary = new WeirdInteger(1);
ary = new WeirdInteger(2);
ary = new WeirdInteger(-2);
ary = new WeirdInteger(-3);
ary = new WeirdInteger(3);
ary = new WeirdInteger(0);

// Array.Sort is calling the CompareTo method in WeirdInteger
// repeatedly - control has been inverted here.
Array.Sort(ary);

// Expected order is 0,1,2,3 (ascending integers but
// 'less than' the negative integers) and then -3,-2,-1
// (ascending negative integers)
foreach (WeirdInteger i in ary)
Console.WriteLine(i.ToString());

}
}

class WeirdInteger : IComparable
{
private int value;
internal WeirdInteger(int value)
{ this.value = value; }

#region IComparable Members
// Sort our integers such that any value less than
// zero is bigger than a value greater than zero.  Otherwise
// sort normally.  This means that -1 is the largest possible number.
public int CompareTo(object obj)
{
int otherValue = ((WeirdInteger)obj).value;
if (value == otherValue)
return 0;
else if (value < 0 && otherValue >= 0)
return 1;
else if (otherValue < 0 && value >= 0)
return -1;
else
return value.CompareTo(otherValue);
}
#endregion

public override string ToString()
{
return value.ToString();
}
}
}```

## 2 thoughts on “Inversion of Control in .NET: an example of the use of IComparable”

1. Srinivas Donavalli says:

Thanks a lot Rich.Gives me a lot of clarity.

2. Hari says:

Thank Rich. The way you are explaining making easy to the developers to digest the concept.