Java vs. C#

Stack class


Java
 
public class Stack 
{
    private Node first = null;
    public boolean isEmpty() {
        return (first == null);
    }
    public Object pop() throws Exception{
        if (first == null) 
            throw new Exception("Can't Pop from an empty Stack.");
        else {
            Object temp = first.Value;
            first = first.Next;
            return temp;
        }
    }
    public void push(Object o) {
        first = new Node(o, first);
    }
    class Node {
        public Node Next;
        public Object Value;
        public Node(Object value) {
            this(value, null); 
        }
        public Node(Object value, Node next) {
            Next = next;
            Value = value;
        }
    }
}

C#
 
public class Stack
{
    private Node first = null;
    public bool Empty {
        get {
            return (first == null);
        }
    }
    public object Pop() {
        if (first == null) 
            throw new Exception("Can't Pop from an empty Stack.");
        else {
            object temp = first.Value;
            first = first.Next;
            return temp;
        }
    }
    public void Push(object o) {
        first = new Node(o, first);
    }
    class Node
    {
        public Node Next;
        public object Value;
        public Node(object value): this(value, null) {}
        public Node(object value, Node next) {
            Next = next;
            Value = value;
        }
    }
}