Any ASP.NET application is an object (or class) of type :
public class Global : System.Web.HttpApplication
(you will find this in the global.asax)
The ASP.NET engine invoke by IIS creates an instance of your object and the HttpApplication interface demands Application_BeginRequest, which is invoke by IIS (by way of the ISAPI)
When the ASP.NET Engine creates an instance of your class it looks like this:
HttpApplication thisAspApp = new YourASPApplication()
thisApplication.Begin_Request()
Because it casts your app as a derived type, the known interface can be directly accessed without need for overrides. While HttpApplication is a class it is being used as an interface by way of casting. If you add a new method (or property) to your class the ASP.NET engine can not access that method because it is only aware of your application as a generic HttpApplication. In VS if you go to the global.asax and right click over HttpApplication in the class declaration and select "Go To Definition" (or press F12) you can see the structure of base class. (or you can find it in MSDN online).