В чем же отличия следующих элементов языка C#?
Ну во первых купите/скачайте "clr via c#" любых дремучих изданий если не найдете свежее. Во вторых - Абстрактный класс может содержать в себе поля , интерфейс не может. Нельзя реализовать множественное наследование абстрактных классов. 
Структура/Класс - гуглите разницу между ссылочными и значимыми типами. А еще лучше - поучите C++ , узнаете где могут храниться переменные в памяти. 
Абстракт/Виртуальный методы - Абстракт не имеет реализации. Виртуальный 1)может иметь 2) в основном имеет отношение к наследованию и полиморфизму.
Можно вот это еще почитать:
metanit.com/sharp/tutorial/3.1.php