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}
.

\CommandA
will make a space considerably larger that5mm
since 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.\newcommand{\CommandA}
. You need a\csname .. \endcsname
construct:\newcommand{\C}[1]{\csname Command#1\endcsname}
\csname .. \endcsname
but 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.