Advice on "Factory" Pattern Implementation
I Think you should do it more generic:

public static class Factory
{
    static Dictionary&lt;String, Func&lt;String, Abstract&gt;&gt; classes;

    public static Abstract GetInstance(String s){
        if(!classes.ContainsKey(s)) throw new Exception();
        Func&lt;String, Abstract&gt; create=classes[s];
        return create(s);
    }

    static Factory ()
    {
        classes=new Dictionary&lt;String, Func&lt;String, Abstract&gt;&gt;(){
            {"class1", (x)=&gt;new Class1(x)},
            {"class2", (x)=&gt; new Class2(x)}
        };
    }
}


This code is way more readable.
You have the static constructor block, where you register the factory methods according to the keys. And the GetInstance-Method shrinks to 3 lines, of which one is a purely guarding clause.

Edit: modified after Mat's Mug's hint.

P.S: Oh, I forgot to mention, that you really never should return null. 

Better a) throw an Exception or b) use a NullObject.