The first high-level language that I learned was Java. Of course I shortly found that there was a need to know C# too. So, as I started  to learn C# I kept a list of the differences between C# and Java (as can m be seen below). 
  
 Class
 --------
     Java: class GMTTime extends Time implements ICloneable{...}
     C#: class GMTTime: Time, ICloneable{...}Constructor
 -----------
     Java: GMTTime(){
               this(System.DateTime.Now);
           }    C#:GMTTime():this(System.DateTime.Now){...}
        GMTTime(long millis): base(millis){...}//if base not specified default constructor 
                                               //called
Java            =       C#
 ---------------------------
     Finalizer     =       destructors //spedifies code that will execute once an object is no 
                                     //longer usable
     Package       =       namespace
     import        =       using
     StringBuffer  =       StringBuilder
    
     indexer: allows a class to be accessed as an array
     struct: lightweight class, value type instead of reference type (like class)
Method Inheritance
 -------------------
     class BaseClass{
         //virtual is required  to allow this method to be overridden by a sub class
         virtual long GetTime(){...}
     }
    class childClass: BaseClass {
         //override allows an object to be a base class (BaseClass) but will still use
         //this method
         override long GetTime(){...}
     }
    class childClass2: BaseClass {
         //new overwrites the method but uses the method of the class that the calling
         //object is.
         new long GetTme(){...}
     }
Java Final
 ----------
     class = sealed //can not be inherited
     method = no virtual
     variable = const or readonly
Accessibility
 -------------
     public = visible to all
     protected = only derived classes
     private = only withen given class
     internal = visible only to project/assembly/jar file
     protected internal = visible only to project/assembly/jar file and derived classes
     default = private
Getters/Setters
 ---------------
     //new C# way...old way used getter and setter methods
     class Circle {
          private int radius;
          public int Radius {
               get {return radius;}
               set {radius = value;}
          }
         public int Area {
               get { return 3.14 * radius * radius; }
          }
     }
    class otherClass{
         Circle c = new Circle();
         c.Radius = 3;//Note: no need to call a setter method.
         int area = c.Area;//Note no need to call a getter method
     }
synchronous = responds immediately
 asynchronous = responds when ready to.
How to do events in C#
 -----------------------------
 1. Manually Trigger Event
     //namespace level, also specifies signature for event/handling methods
     public delegate void MyEventHandler();
 2. Create an Event (requires a delegate)
     public event MyEventHandler TriggerIt;//class level
 3. Register the event handlers with the event
     obj.TriggerIt += new MyEventHandler(obj.method);
 4. Manually Trigger Event
     obj.TriggerIt();
// Declare the delegate handler for the event:
 public delegate void MyEventHandler();//determines signitures of handling methods.
class TestEvent{
     // Declare the event implemented by MyEventHandler.
     public event MyEventHandler TriggerIt;
    public void MyMethod1(){
         System.Console.WriteLine("Hello!");
     }
     public void MyMethod2(){
         System.Console.WriteLine("Hello again!");
     }
     public void MyMethod3(){
         System.Console.WriteLine("Good-bye!");
     }
    static void Main(){
         TestEvent myEvent = new TestEvent();
        // Subscribe to the event by associating the handlers with the events:
         myEvent.TriggerIt += new MyEventHandler(myEvent.MyMethod1);
         myEvent.TriggerIt += new MyEventHandler(myEvent.MyMethod2);
         myEvent.TriggerIt += new MyEventHandler(myEvent.MyMethod3);
         // Trigger the event:
         myEvent.TriggerIt();
       
         // Unsuscribe from the the event by removing the handler from the event:
         myEvent.TriggerIt -= new MyEventHandler(myEvent.MyMethod2);
         System.Console.WriteLine("\"Hello again!\" unsubscribed from the event.");
         // Trigger the new event:
         myEvent.TriggerIt();
     }
 }
typeof, GetType, is
 ----------------------
     Type s = typeof(String);
     Type s = "my String".GetType();
     "my string" is String //returns true
Array
 -----
     MyArray[column,row]
     int[] arr = new int[]{1,2,3);
     int[] arr = {1,2,3};
     foreach(int i in arr){
         Console.WriteLine("Value is {0}",i);
     }



