Java2C# Antonio Cisternino Part I Premessa C# si pronuncia circa come “see sharp”!!! Non C cancelletto Non C gratella Non C diesis Gioco di parole: C# = vedi definito C# = C ++++ C# = C ++ Do diesis Visual Studio .NET Gli studenti di informatica e di ingegneria informatica hanno diritto ad una copia di VS.NET Distribuzione (modello biblioteca): Firmare alla consegna Prendere i dischi Riportare i dischi! Firmare la restituzione Foreword: .NET and Java .NET comes after Java and many features have been borrowed from it as well from other systems Java has done the same in the past borrowing from C++, Smalltalk, and many others (thus try to understand the differences and improvements!) Frameworks tend to collect a set of techniques developed by researchers and organize them in a meaningful way With .NET the computer science onion grows with an additional layer: on top of the OS lies the abstract machine and the framework Outline Introduction to .NET and CLR Overview of C# wrt Java Java as subset of C# CLR type system Outline Introduction to .NET and CLR Overview of C# wrt Java Java as subset of C# CLR type system Microsoft .NET ‘Dot NET’ is a brand name to indicate a set of technologies. It is a platform to develop applications. Two essential elements of the platform are: The Common Language Runtime (CLR) A class library (Framework) which complements the CLR Framework and CLR offer a set of services and an execution environment to .NET programs Common Language Runtime in different languages issupport like composing Programming Goal of .NET initiative is to pieces in different keys, particularly if you work at the program atwritten all levels keyboard. interoperability If you have learned or pieces in many keys,is each key will have its own designed special emotional aura. CLR a runtime support to be Also, certain kinds of figurations “lie in the hand” in one used byaremany languages key but awkward in another. So you are channeled by your choice of supported key. In some ways, even enharmonic Main services by .NET are: keys, such as C-sharp and D-flat, are quite distinct in feeling. A common type how system This shows a notational system can play a rolecollection in shaping system the final product. significant A garbage An (Gödel, Escher, Bach: an eternal golden braid, Hofstadter, 1980, Chapter X) execution environment Common Language Runtime CLR supports the execution of programs in Common Intermediate Language (CIL) format CIL is a language of a stack based machine The core of CLR is the Execution Engine (EE) EE is responsible of compiling CLI code into machine code using a JIT Common Language Runtime CLR could be roughly seen as a shared backend of multiple compilers The overall model is: compile a language into CIL (compiler) compile CIL into executable (runtime) Execute the compiled program The model is different from Java where an interpreter is needed and JIT an optimization How CLR works C# Unmanaged GC x86 C++ Managed x86 Security Managed ML CIL VB BCL Loader JIT CLR … CLR and progr. languages If a language compiles to CIL may offer types to other programs A language may expose CIL types written in other languages Together with CLR Microsoft deploys a new language called C# Both CLI and C# are ECMA standards and a reference implementation has been released by Microsoft (http://msdn.microsoft.com) Outline Introduction to .NET and CLR Overview of C# wrt Java Java as subset of C# CLR type system C# Language C# is a language derived from C++ Java has influenced the language although most influence come from CLR It has been designed together with CLR thus it exploits all its services It is more expressive than Java Interoperability is built-in into language C# Overview It is object oriented It supports interfaces + single inheritance Type system is common rooted (in object) Objects on the heap are garbage collected It allows stack-based allocation of quasi-objects It exposes metadata extensions as attributes It introduces delegate type and events C# Overview (cont.) It allows to control over virtual methods Methods parameters could be labeled in/out/ref Classes may have a destructor like C++ Explicit release of resources is handled through interfaces Better control on name clashes It supports properties It allows overloading of operators C# Overview (cont.) Arrays can be multidimensional Alias for types are allowed XML documentation is supported Access to memory through pointers in unsafe mode A preprocessor-like syntax is supported Through platform invoke it is possible to access external functions stored in dlls C# and Java ‘Italic’ features are shared with Java Java is essentially a subset of C# with four important exceptions: Throws clause on methods Inner classes Thread synchronization Class loading C# and Java (cont.) Inner classes in C# are allowed only as namespace, state must be explicitly passed as arguments Threads are exposed through the Monitor class Class loading model has same expressivity on both sides IMPORTANT: C# and CLR have been designed together but are separate thus functionality are better separated than in Java/JVM Thus understanding C# benefits from some understanding of the underlying CLR C# and Java (cont.) C# allows defining multiple classes in the same file: the unit of deployment is the Assembly (very different from JAR!) Types are organized in namespaces that are similar to Java packages Namespaces are defined as blocks rather than statements at the beginning of the file A single file may contain definitions related to different namespaces Outline Introduction to .NET and CLR Overview of C# wrt Java Java as subset of C# CLR type system Java in C# The syntax of C# is rather closed to Java because both derive from C++ The most noticeable syntax difference in the shared constructs are extends and implements keywords not present in C# package nearly maps into namespace C# adopts Pascal convention (capital first) Hello world import using System; java.lang; package namespace it.unipi.di.hello; it.unipi.di.hello { public class Hello { public static void main(String[] Main(string[] args) { System.out.println("Hello Console.WriteLine ("Hello world"); } }} } Inheritance and interfaces Java class A {} interface B {} interface C {} class D extends A implements B, C {} C# class A {} interface B {} interface C {} class D : B, C, D {} Methods Java String f(int i){ while (true) { for (int j = 0; j < 10; j++) …; } return "f"; } C# string f(int i) { while (true) { for (int j = 0; j < 10; j++) …; } return "f"; } Exception handling Java try { foo(); }catch (IOException f) { } catch(Exception e){ … // Not use e } finally { } C# try { foo(); } catch (IOException f) { } catch { … // General handler } finally { } Other stuffs Local variable declarations used in Java can be used in C# Protection mechanisms (private, protected, public, internal/package) are the same Java values are included in C# (C# allows custom defined values): numbers and references Separation between CLR and C# is better defined than Java and JVM: there is the notion of “standard library” defined within the standard Outline Introduction to .NET and CLR Overview of C# wrt Java Java as subset of C# CLR type system Type system One way to address interoperability (perhaps the most important) within CLR is sharing the same type representation for multiple languages C# exposes most of the CLR type system CLR type system is really sophisticated with respect to the one exposed by JVM Java type system T[] Object Class interface T String class T int Base types CLR type system Array Object Type interface T String ValueType T[] Struct T int Base types class T Enum Enum T Delegate Delegate T Type system features Type system is common rooted! The class System.Int32 is inherited from Object The trick to avoid inefficiencies in treating values as objects is called boxing/unboxing Value types can be defined although with some restriction: i.e. no inheritance Type system features There are several type constructors: array, delegates, enumerations Enumerations are equivalent to integer but type information is preserved at runtime Type descriptions are accessible by programs through reflection Through class Type and related classes it is possible to inspect type’s structure C# and the CLR type system C# standard defines many base types (int, string, object, and so on) that are mapped into CLR types; for instance: System.Int32 double System.Double string System.String int All CLR types are accessible from C# and vice-versa. Type constructors in C# Type constructors are: of type T T[] Delegate delegate ... Enum enum { … } Value types struct T { … } Classes class T { … } Interfaces interface T { … } Array Next lecture Array types Enum types Value types Delegate types differences from classes boxing and unboxing Base structure Multicast delegates Event model using delegates Event type