private IList<MPoint> classes = new List<MPoint>(); 
The Java List interface is analogous to the .NET IList<T> interface.
The ArrayList concrete type is is analogous to the .NET List<T> type.
final is a bit more complicated. In this case (field declaration + initializer), the closest would be readonly. On the other hand, as of the current version, there's no way to mark a local variable as final in C#. (Off-topic, final in the context of compile-time constants = const. In the context of "cannot override / inherit further" = sealed).
EDIT: To answer your question about what "final" means, it is normally used to indicate a kind of immutability - that something cannot be further modified or overridden. What sort of mutability is actually prevented with that modifier and its C# analogues depends on context and is hard to describe without going into specifics.