It makes sense to define families of such commands.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\defineobject}{mm}
{
\prop_new:c { g_garth_#1_prop }
\prop_gset_from_keyval:cn { g_garth_#1_prop } { #2 }
}
\NewDocumentCommand{\getobject}{mm}
{% #1 = object name, #2 = variable or string
\prop_item:cf { g_garth_#1_prop } { #2 }
}
\cs_generate_variant:Nn \prop_item:Nn { cf }
\ExplSyntaxOff
\defineobject{C}{
A=\hspace{5mm},
B=\vspace{5mm}
}
\newcommand{\C}[1]{\getobject{C}{#1}}
\begin{document}
X\C{A}Y\C{B}
XYZ
\end{document}

This might turn to be useful for the similar problem in Can you create concatenate variable names in LaTex?
\documentclass[12pt]{exam}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\defineobject}{mm}
{
\prop_new:c { g_garth_#1_prop }
\prop_gset_from_keyval:cn { g_garth_#1_prop } { #2 }
}
\NewDocumentCommand{\getobject}{mm}
{% #1 = object name, #2 = variable or string
\prop_item:cf { g_garth_#1_prop } { #2 }
}
\cs_generate_variant:Nn \prop_item:Nn { cf }
\ExplSyntaxOff
\defineobject{fun}{
A={$s(t) = 12t^2 -7t + 16$},
B={$s(t) = 16t^2 +3t + 10$},
C={$s(t) = 12t^2 + t + 10.$}
}
\newcommand{\exam}{A}
\begin{document}
\begin{questions}
\question
The position of an object moving along a straight line is given by
\getobject{fun}{\exam}. Find the average velocity of the object over
the interval $[1,1+h]$ where $h>0$ is a real number.
\renewcommand{\exam}{B} % just for testing
\question
The position of an object moving along a straight line is given by
\getobject{fun}{\exam}. Find the average velocity of the object over
the interval $[1,1+h]$ where $h>0$ is a real number.
\end{questions}
\end{document}
The second question has a modified \exam just to test whether the expected output is obtained. You can define as many objects as you want. If one has just one variable \exam, it also makes sense to define a shorthand:
\newcommand{\obj}[1]{\getobject{#1}{\exam}}
and then the calls above can be more simply \obj{fun}.

\CommandAwill make a space considerably larger that5mmsince it has a word space either side (so typically you'll get around 2/3 of an em extra space unless you put%at ends of the lines in thse definitions. – David Carlisle Jul 17 '15 at 09:40\newcommand{\CommandA}. You need a\csname .. \endcsnameconstruct:\newcommand{\C}[1]{\csname Command#1\endcsname}– Arash Esbati Jul 17 '15 at 09:40And Thanks @ArashEsbati, I've already implemented the first answer and got it to work. Originally I was trying to use
– Novice C Jul 17 '15 at 09:47\csname .. \endcsnamebut I failed to use the correct syntax it seems, thanks for showing how to properly use it. Also, yes completely failed to post correct code—sorry about that.