1. Абстрактный метод не имеет реализации, Виртуальный имеет, при этом если, вы вызываете виртуальный метод используя указатель базового класса, то CLR вызовет метод именно того класса, на который указывает указатель, а не метод базового класса.
например
Base b = new Derived();
b.Method();
тут будет вызов реализации Derived.Method, а не Base.Method
т.е. вызов виртуального метода основан не на типе указателя, а на конкретном объекте в памяти, когда как в случае перекрываемых методов будет вызван метод базового класса, а не наследуемого.
2. Абстрактный класс - это класс у которого не реализации указанных методов, а интерфейс указывает какие конкретно методы должны быть реализованы у класса.
3. Структуры хранятся в стеке, а не в куче, структуры нельзя наследовать, нужно зачем, затем, что, структуры несут меньше расходов памяти, значимый тип, несет меньше накладных расходов, и вычислительных процессов, но имеет кучу ограничений.