Friday, March 28, 2008

C# Generics and My Kludgy Example

Trying to use a few basic features. Note the use of Generics in the Pair class. Closures are next I guess.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Examples
{
    class Program
    {
        static void Main()
        {
            Chemical water = new Chemical("water", 32, 212);
            Chemical nitrogen = new Chemical("nitrogen", -500, -120);
            Chemical h2o = new Chemical("h2o", 32, 212);
            Console.WriteLine(LiquidChemical.sortPair(water, nitrogen));
            Console.WriteLine(GaseousChemical.sortPair(water, nitrogen));
            Console.WriteLine(GaseousChemical.sortPair(h2o, nitrogen));
            Console.Read();
        }
    }

    public class Chemical
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int freezingPoint;
        public int FreezingPoint
        {
            get { return freezingPoint; }
            set { freezingPoint = value; }
        }
        private int boilingPoint;
        public int BoilingPoint
        {
            get { return boilingPoint; }
            set { boilingPoint = value; }
        }
        public Chemical(String name, int freezingPoint, int boilingPoint)
        {
            this.name = name;
            this.boilingPoint = boilingPoint;
            this.freezingPoint = freezingPoint;
        }
        public override string ToString()
        {
            return String.Format("\nname:             {0}\nfreezing point:   {1}\nboiling point:    {2}", Name, FreezingPoint, BoilingPoint);
        }
    }

    public class Pair
    {
        private T[] thePair = new T[2];
        public Pair(T a, T b)
        {
            thePair[0] = a;
            thePair[1] = b;
        }
        public override String ToString() {
            return thePair[0].ToString() + ":" + thePair[1].ToString();
        }
    }
    public class LiquidChemical 
    {
        public static Pair sortPair(Chemical c1, Chemical c2) 
        {
            return c1.FreezingPoint < c2.FreezingPoint ? new Pair(c1, c2) : new Pair(c2, c1);
        }
    }
    public class GaseousChemical 
    {
        public static Pair sortPair(Chemical c1, Chemical c2)
        {
            return String.Compare(c1.Name, c2.Name) < 0 ? new Pair(c1, c2) : new Pair(c2, c1);
        }
    }
}