The various version control systems differ in how branches are implemented, and these differences cannot be entirely concealed by VC.
On some decentralized version control systems, including Bazaar and Mercurial in its normal mode of operation, each branch has its own working directory tree, so switching between branches just involves switching directories. On Git, switching between branches is done using the git branch command, which changes the contents of the working tree itself.
On centralized version control systems, you can switch between branches by typing C-u C-x v v in an up-to-date work file (see Advanced C-x v v), and entering the revision ID for a revision on another branch. On CVS, for instance, revisions on the trunk (the main line of development) normally have IDs of the form 1.1, 1.2, 1.3, ..., while the first branch created from (say) revision 1.2 has revision IDs 188.8.131.52, 184.108.40.206, ..., the second branch created from revision 1.2 has revision IDs 220.127.116.11, 18.104.22.168, ..., and so forth. You can also specify the branch ID, which is a branch revision ID omitting its final component (e.g., 1.2.1), to switch to the latest revision on that branch.
On a locking-based system, switching to a different branch also unlocks (write-protects) the working tree.
Once you have switched to a branch, VC commands will apply to that branch until you switch away; for instance, any VC filesets that you commit will be committed to that specific branch.