tienes mucha razon edgusano, vaya no se me habia ocurrido de esa manera, (perdon por ponerlo en vb a pesar de que la pregunta es en c# pero solo tengo instalado vb express, ademas la equivalencia no seria muy distinta
Código:
Dim lista As New ArrayList()
Dim boton As Button
lista.Add(New Button)
lista.Add(New Button)
lista.Add(New Button)
lista.Add(New Button)
boton = CType(lista(0), Button)
boton.Text = "0"
boton = CType(lista(1), Button)
boton.Text = "1"
MessageBox.Show(CType(lista(0), Button).Text)
MessageBox.Show(CType(lista(1), Button).Text)