Buenas, estoy aprendiendo programación (C#) y estoy atascado con la programación orientada a objeto... (modo consola)

ahora mismo estoy intentando llamar a un método (altas) de la clase Alumno desde main y me dice siempre que "altas no está en el contexto actual"
no entiendo que tengo mal,
a ver si alguien me ayuda

esto es lo que llevo hecho:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
namespace Practica3
{
public class Alumno
{
public int numero;
public string nombre;
public string dni;
public string direccion;
public Alumno(int num1, string nom1, string dni1, string dir1)
{
this.numero = num1;
this.nombre = nom1;
this.dni = dni1;
this.direccion = dir1;
}
public void altas()
{
ArrayList lista = new ArrayList();
int num1;
string nom1, dni1, dir1;
Console.Write("Introduce numero: ");
num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Introduce nombre: ");
nom1 = Convert.ToString(Console.ReadLine());
Console.Write("Introduce dni: ");
dni1 = Convert.ToString(Console.ReadLine());
Console.Write("Introduce direccion: ");
dir1 = Convert.ToString(Console.ReadLine());
Alumno P = new Alumno(num1, nom1, dni1, dir1);
lista.Add(P);
for (int i = 0; i < lista.Count; i++)
{
Console.WriteLine(((Alumno)lista[i]).nombre);
}
}
}
class Practica3
{
static void Main(string[] args)
{
int opcion = 0;
// menú y switch para las opciones
do
{
Console.Clear();
Console.WriteLine("Elija una opción:");
Console.Write("\n");
Console.WriteLine("1. Altas");
Console.WriteLine("0. Salir");
Console.Write("\n");
Console.Write("Opción: ");
opcion = Convert.ToInt32(Console.ReadLine());
switch (opcion)
{
case 0:
Console.WriteLine("FIN DEL PROGRAMA");
Console.ReadKey();
break;
case 1:
altas();
break;
default:
break;
}
}
while (opcion != 0);
}
}
}