1. Virtual vs Abstract
Virtual methods allow subclasses to provide their own implementation of that method using the override keyword. A virtual method can be part of any class and needs to have body. A class with only virtual (or) non_virtual methods can be instantiated.
Abstract methods in a class contain no method body, and are implicitly virtual.If a class has any abstact methods, then it must tag itself as abstract, and no instances of it can be created.
Neither abstract or virtual can be declared private, since it would defeat the purpose, and subclasses must override them using the same method signature and "override" keyword.
2. Abstract Classe vs Interface
An abstract base class is needed in a different situation. Some times you can write most of the implementation of a class but not all of it. perhaps you have some classes that have a lot in common, and could really use a parent class, but some of the methods and/or properties don't generalize well. Let’s take the example of Image. There are lots of different kinds of images: bit maps, jpegs, gifs, tiffs, etc. You want all of those kinds of images to have (mostly) the same methods and properties, for example you want them all to have a RotateFlip() method to allow the caller to rotate the image, but you can't write a meaningful implementation for that method until you know what kind of image you're dealing with.
You need an interface if you want to assign common behaviour to various classes that do not derive from the same base class (other than Object). The excellent example of IEnumerable: you want to be able to make many classes from all over the class hierarchy enumerable, and in some methods treat them as "the same" for purposes of enumeration, even though they're otherwise completely different classes that have nothing in common. If you create an abstract class with no method implementation and no data members it is pretty much the same as defining an interface.
In general there are a number of differences.
1. In abstract classes you can have data members to keep, for instance, internal state
2. In abstract classes you can provide implementation for a method:
say you have a Vehicle abstract class, you can derive Bike, MotorCycle and Car from that, but you might want to define a method GetCC() in the base class that will never change (no can do with interfaces)
3. C# object can implement as many interface you want but can just inherit from one class.
4. An abstract class can have constructor declaration while an interface can not do so.
5. An abstract Class is allowed to have all access modifiers for all of its member declaration while in interface we can not declare any access modifier(including public) as all the members of interface are implicitly public.
ref:
http://bytes.com/topic/c-sharp/answers/259751-confuesd-about-abstract-class-vs-interface
http://www.c-sharpcorner.com/UploadFile/prasoonk/AbstractClassvsInterface06102009051117AM/AbstractClassvsInterface.aspx
3. Delegate vs Interface
Both delegates and interfaces enable a class designer to separate type declarations and implementation. A given interface can be inherited and implemented by any class or struct. A delegate can be created for a method on any class, as long as the method fits the method signature for the delegate. An interface reference or a delegate can be used by an object that has no knowledge of the class that implements the interface or delegate method. Given these similarities, when should a class designer use a delegate and when should it use an interface?
Use a delegate in the following circumstances:
· An eventing design pattern is used.
· It is desirable to encapsulate a static method.
· The caller has no need to access other properties, methods, or interfaces on the object implementing the method.
· Easy composition is desired.
· A class may need more than one implementation of the method.
Use an interface in the following circumstances:
· There is a group of related methods that may be called.
· A class only needs one implementation of the method.
· The class using the interface will want to cast that interface to other interface or class types.
· The method being implemented is linked to the type or identity of the class: for example, comparison methods.
ref:
http://msdn.microsoft.com/en-us/library/ms173173.aspx
4. XAML Compilation: BAML