Chapter - 1 The Philosophy of .NET 1 School of CSE Content The Building Block of the .NET Platform (CLR, CTS and CLS), 2 .NET Base Class Libraries, .NET Binaries (aka Assemblies). The Role of the Common Intermediate Language, .NET Type Metadata, Assembly Manifest, Compiling CIL to Platform – Specific Instructions. Understanding the Common Type System, Intrinsic CTS Data Types, Understanding the Common Languages Specification. Understanding the Common Language Runtime A tour of the .NET Namespaces, Increasing Your Namespace Nomenclature, Deploying the .NET Runtime. Building C # Application using csc.exe and Visual Studio .NET IDE School of CSE Understanding the previous state of affairs As a C/Win32 API Programmer It is complex C is a short/abrupt language Manual memory management, ugly pointer arithmetic, ugly syntactic constructs Not a OO language As a C++/MFC Programmer Root is C C++ with MFC is still complex and error-prone As a VB 6 Programmer Not a complete OOP (“Object-aware”) – Why? Doesn‟t support inheritance No multithreading No parameterized Classes Low-level API calls are complex 3 School of CSE Previous state of affairs… As a Java/J2EE Programmer Use of Java front-to-back during development cycle No language freedom! Pure Java is not suitable for graphic intensive problems (E.g. 3D game) No cross-language integration As a COM Programmer Complex creation of COM types Active Template Library (ATL) Forced to contend with brittle/fragile registration entries Deployment issues 4 School of CSE .NET Solution Full interoperability with existing Win32 Code Existing COM binaries can interoperate with .NET binaries Complete and total language integration Supports cross-language inheritance, exception handling, and debugging Common runtime engine shared by all .NET aware languages A base class library Good object model used by all .NET aware languages No more COM plumbing! No IClassFactory, IUnKnown, IDispatch, etc. Truly simplified deployment model No need to register a binary unit into the system registry Allows multiple versions of same *.dll 5 School of CSE .NET Framework VB C++ C# JScript J# Common Language Specification Windows Forms ADO.NET and XML Base Class Library Common Language Runtime Operating System 6 School of CSE Visual Studio.NET ASP.NET Web Forms Web Services CLR (Common Language Runtime) CLR sits on top of OS (same as JVM of Java) CLR loads modules containing executables and executes them Code may be managed or unmanaged Managed code consists of instructions in pseudo random code called 7 CIL (Common Intermediate Language). CIL instructions are JIT compiled into native machine code at runtime JIT compiled methods reside in cache until the application‟s life time Advantages of managed code: type safety, memory management, and code verification security CLR can translate code from C#, J#, C, C++, VB, and Jscript into CIL. CLR doesn‟t launch a new process for every application. It launches one process and hosts individual applications in application domains School of CSE Building Blocks of .NET CLR (Common Language Runtime) To locate, load, and manage .NET types Automatic memory management, language integration, and type safety CTS (Common Type System) Describes all possible data types and programming constructs supported by the runtime CLS (Common Language Specification) A set of rules that defines a subset of types and specifications 8 School of CSE Base Class Libraries Encapsulates various primitives like: threads, file IO, graphical rendering, and other interaction with HW devices It also provides: database manipulation, XML integration, Web-enabled front-end. Data Access GUI Threading File IO Base Class Libraries XML/SOAP Common Language Runtime CTS 9 School of CSE CLS C# Almost same as Java No pointers required Automatic memory management (No „delete‟) Enumeration, class, structure, etc. Operator overloading allowed Interface-based programming techniques Assign characteristics to types (same as COM IDL) C# can produce code that can run only on .NET environment (unlike COM server or Win32 API) 10 School of CSE Understanding Assemblies Windows applications have dependencies on one 11 or more DLLs These DLLs may contain COM classes registered in System registry When these components are updated, applications may break – 'DLL hell' Solution: .NET Assemblies C# .NET compiler doesn't generate machine code. It is compiled into "assembly" School of CSE Assembly Metadata C# source code 12 School of CSE + C# .NET Compiler = IL Assembly Assembly Metadata C# source code + C# .NET Compiler = IL Assembly Metadata Perl source code + Perl .NET Compiler = IL Assembly = COBOLsource code 13 School of CSE + COBOL.NET Compiler Metadata IL Assembly IL & Metadata Intermediate Language (IL/CIL): Same as first pass of compiler. It can't be executed (it is not in binary format) Metadata Describes the assembly contents No need for component registry Each assembly includes information about references to other assemblies E.g. If you have a class called Car in a given assembly, the type metadata describes Car's base class, which interfaces are implemented by Car, description of members of Car. 14 School of CSE Assembly… When CLR loads your application, it examines your program's metadata to know which external assemblies are required for execution Private assemblies Used by single application Is not shared Most preferred method Shared assemblies Intended for multiple applications Global Assembly Cache Manifest The metadata of assemblies: version, list of externally defined assemblies, etc. 15 School of CSE Single-File and Multifile Assemblies Single file assemblies single binary file CIL, metadata and associated manifest Multifile assemblies numerous . NET binaries Primary module must contain assembly manifest Other related modules contain module level manifest, CIL and type metadata Assembly is a logical grouping of one or more related modules that are intended to be initially deployed and versioned as single unit 16 School of CSE Example of CIL CIL sits above a specific compiler (C#, J#, etc.) The associated compiler emits CIL instructions using System; namespace Calculator { public class CalcApp { public static void Main(string[] args) { Calc c = new Calc(); int ans = c.Add(10, 84); Console.WriteLine(ans); Console.ReadLine(); } } 17 School of CSE public class Calc { public int Add(int x, int y) { return x + y; } } } All .NET aware languages emit same CIL instructions Program in VB.NET Imports System Namespace ConsoleApplication7 Module CalcApp Sub Main() Dim ans As Integer Dim c As New Calc ans = c.Add(10, 84) Console.WriteLine("10+84 is{0}.", ans) Console.ReadLine() End Sub End Module Class Calc Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer Return x + y 18 End Function School of CSE CIL of Add() Method .method public hidebysig instance int32 Add(int32 x, int32 y) cil managed { // Code size 8 (0x8) .maxstack 2 .locals init ([0] int32 CS$00000003$00000000) IL_0000: ldarg.1 IL_0001: ldarg.2 IL_0002: add IL_0003: stloc.0 IL_0004: br.s IL_0006 IL_0006: ldloc.0 IL_0007: ret } // end of method Calc::Add 19 School of CSE CIL Of VB Code Main method .method public static void Main() cil managed { .entrypoint .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) // Code size 40 (0x28) .maxstack 3 .locals init (int32 V_0, class ConsoleApplication7.Calc V_1) IL_0000: newobj instance void ConsoleApplication7.Calc::.ctor() IL_0005: stloc.1 IL_0006: ldloc.1 IL_0007: ldc.i4.s 10 IL_0009: ldc.i4.s 84 20 School of CSE IL_000b: callvirt instance int32 ConsoleApplication7.Calc::Add(int32, int32) IL_0010: stloc.0 IL_0011: ldstr "10+84 is{0}." IL_0016: ldloc.0 IL_0017: box [mscorlib]System.Int32 IL_001c: call void [mscorlib]System.Console::WriteLine(string, object) IL_0021: call string [mscorlib]System.Console::ReadLine() IL_0026: pop IL_0027: ret } // end of method CalcApp::Main Manifest External Assembly .assembly extern mscorlib { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .ver 1:0:5000:0 } .assembly ConsoleApplication1 { .hash algorithm 0x00008004 .ver 1:0:2058:39833 } .module ConsoleApplication1.exe // MVID: {51BE4F31-CBD0-4AE6-BC9D-F9A4976795FD} .imagebase 0x00400000 .subsystem 0x00000003 .file alignment 4096 .corflags 0x00000001 // Image base: 0x070b0000 21 School of CSE // .z\V.4.. CIL to Execution Desktop CIL JIT Server Pocket PC Jitter compiles CIL instructions on the fly into corresponding machine code and cache it. This is useful for not recompiling, if the same method is called again 22 School of CSE Common Type System (CTS) CTS is a formal specification that describes how a 23 given type must be defined for CLR CTS Class Type CTS Structure Type CTS Interface Type CTS Enumeration type CTS Delegate type School of CSE CTS Class Type Same as C++ class Can contain members: methods, properties, events, etc. Support for abstract members that define a polymorphic interface for derived classes Multiple inheritance is not allowed 24 School of CSE CTS Class Characteristics "sealed"? – sealed classes can't function as base classes Implement any interfaces? – An interface is a collection of abstract members Abstract or Concrete? – Abstract classes (to define common behaviors for derived) can't be created directly but concrete classes can. Visibility? – visibility attribute to know whether external assemblies can use it. 25 School of CSE CTS Structure types Same as C/C++ Derived from a common base class System.ValueType CTS Interface Type Same as pure abstract class of C++ A description of work that a derived class can perform Similar to a class, but can never be instantiated CTS Enumeration type To group name/value pairs under a specific name Default Storage: System.Int32 (could be changed) CTS Delegate type Same as C's function pointer (System.MulticastDelegate) Useful for event handling (ASP .NET) 26 School of CSE Intrinsic CTS Data Types .NET Base Type C# Type System.Byte Byte System.SByte sbyte System.Int16 short System.Int32 int System.Int64 long System.UInt64 ulong System.Single float System.Double double System.Object object System.String string System.Boolean bool School of CSE 27 Common Language Specification (CLS) Set of guidelines that describe the minimal and complete set of features a given .NET aware compiler must support C# uses + for concatenation whereas VB .NET uses & C# allows operator overloading but VB .NET does not! The void functions may differ in syntax: ' VB .NET Public Sub Foo() '……. End Sub 28 School of CSE // C# public void Foo() { ……. } CLS Compliance C# Type CLS Compliance byte Yes sbyte No short Yes int Yes long Yes ulong No float Yes double Yes object Yes string Yes char Yes bool School of CSE Yes 29 Example public class Calc { // CLS compliant public int Add(int x, int y) { return x + y; } // Not CLS compliant public ulong Add(ulong x, ulong y) { return x + y; } } Once a method is CLS compliant, then all the .NET aware languages can interact with that implementation 30 School of CSE .NET Source Code CLR .NET Compiler DLL or EXE (CIL) mscoree.dll Class Loader Base Class Libraries (mscorlib.dll) Jitter Platform Specific code mscoree.dll MicroSoft Common Object Runtime Execution Engine 31 School of CSE Execute .NET Execution Engine .NET Namespace MFC, Java, VB 6.0 have predefined set of classes; C# doesn't C# uses namespace concept Any language targeting the .NET runtime makes use of the same namespaces and same types as C# System is the root namespace 32 School of CSE Example in C# System Namespace using System; public Class MyApp { public static void Main() { Console class in System Namespace Console.WriteLine("Hello World"); } } 33 School of CSE Example in VB .NET Imports System Public Module MyApp Sub Main() Console.WriteLine("Hello World") End Sub End Module 34 School of CSE Example in Managed C++ #using <mscorlib.dll> using namespace System; void Main() { Console::WriteLine("Hello World"); } 35 School of CSE Sample .NET namespaces System primitive types, garbage collection, etc System.Collections Container objects: ArrayList, Queue, etc. System.Data System.Data.Common System.Data.OleDb System.Data.SqlClient For Database manipulations ADO .NET System.IO file IO, buffering, etc. System.Drawing System.Drawing.2D GDI+ primitives, bitmaps, fonts, icons, etc. System.Threading Threads School of CSE 36