Casting Func<T> to Func<object>

This will do the trick:

public void Foo<T>(Func<T> p) where T : class
{
    Func<object> f = () => p();
    Foo(f);
}

In C# 4.0 targeting .NET 4.0 (i.e. with variance) that is fine "as is", since there is a reference-preserving conversion from T : class to object. This is possible because Func<T> is actually defined as Func<out T>, making it covariant.

In previous versions of C#, or with C# 4.0 targeting earlier versions of .NET, you need to translate as per Steven's answer.

note, you will need disambiguation to prevent it being recursive! At the simplest, two method names. Or alternatively, Foo((Func<object>)p).