Tienes que utilizar lo que son los descriptores de acceso. No se de que manera estés llenando la clase 'materias', pero por ejemplo yo utilizo esto para cuando necesito llenar los combobox con información que no proviene de una tabla de la base de datos, a este caso que explicas, lo que yo haría es lo siguiente:
public class materias
{
string descripcion;
string codigo:
public materias (string descripcion, string codigo)
{
this.descripcion = descripcion;
this.codigo = codigo;
}
public string Descripcion
{
get { return this.descripcion; }
}
public string Codigo
{
get { return this.codigo; }
}
}
con la clase anterior lo que haría en el combobox es establecer las siguientes propiedades.
ArrayList arrMaterias = new ArrayList();
arrMaterias.Add(new materias("Matemáticas", "M"));
arrMaterias.Add(new materias("Ciencias Sociales", "CS"));
comboBox1.DataSource = arrMaterias;
comboBox1.ValueMember = "Codigo";
comboBox1.DisplayMember = "Descripción";
Con lo anterior, para obtener el valor del código, se tendría que utilizar le propiedad del combo 'SelectedValue', según lo que se tenga seleccionado en el ComboBox.
Si te fijas a la propiedad ValueMember y DisplayMember, le establezco los descriptores declarados en la clase materias.
Espero y que esto te ayude.
Saludos.