TrickyDicky said:
Just that if you were using non-orthogonal coordinates, like having the x and y-axis in the Euclidean plane forming an acute or obtuse angle, df and ∇f would have different components, (just like they would have if we were in a curved surface) and we couldn't identify the gradient of a function with a vector as we usually do in regular vector calculus in Euclidean space with orthogonal coordinates, it would have to be a covector.
Being nonorthogonal is one way that vectors and covectors can be different, but they are different even for orthogonal coordinates in lots of circumstances.
Here's an intuitive way to get an idea of which mathematical objects should be thought of as vectors, and which should be thought of as covectors: Suppose you are given a mathematical description of a situation in good old Cartesian, Euclidean coordinates (x,y,z), but with one difference: Different units are used in measuring distances in the x-y plane and in measuring distances in the vertical direction (z-direction). An example of such a situation is the measurements used by sailors in the olden days. Distances along the surface of the ocean were measured using nautical miles, while vertical distances below the surface of the ocean were measured using fathoms. How long is a fathom, in terms of nautical miles? If you don't know the conversion factor, then you can't convert between vertical distances and horizontal distances.
But you can still do a lot of vector analysis. For instance, you can compute velocities as vectors with components V^x = \dfrac{dx}{dt}, V^y = \dfrac{dy}{dt}, V^z = \dfrac{dz}{dt}. If there is a scalar function, say the temperature of the ocean, T(x,y,z), you can compute a one-form dT with components dT_x = \dfrac{\partial T}{\partial x}, dT_y = \dfrac{\partial T}{\partial y}, dT_z = \dfrac{\partial T}{\partial z}. You can combine a vector with a one-form to get a scalar: If a fish has velocity V and the water has a temperature "gradient" dT, then the rate of change of temperature for the fish will be given by:
\dfrac{dT}{dt} = V^i (dT)_i
But what you can't do is compute any kind of "dot-product" between two vectors, or between two one-forms.