Introduction to C# Adapted from : Anders Hejlsberg, Microsoft CSCE 5013: Hot Topics in Mobile and Pervasive Computing Nilanjan Banerjee University of Arkansas.

Slides:



Advertisements
Similar presentations
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12 Introduction to ASP.NET.
Advertisements

Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.
C# Language Report By Trevor Adams. Language History Developed by Microsoft Developed by Microsoft Principal Software Architect Principal Software Architect.
C#: Data Types Based on slides by Joe Hummel. 2 UCN Technology: Computer Science Content: “.NET is designed around the CTS, or Common Type System.
George Blank University Lecturer. CS 602 Java and the Web Object Oriented Software Development Using Java Chapter 4.
1.NET and C# Peter Groenewegen Vrije Universiteit
AP 08/01 Component Programming with C# and.NET 1st Class Component Support Robust and Versionable Creating and using attributes API integration –DLL import.
C#.NET C# language. C# A modern, general-purpose object-oriented language Part of the.NET family of languages ECMA standard Based on C and C++
C#.NET C# language. C# A modern, general-purpose object-oriented language Part of the.NET family of languages ECMA standard Based on C and C++
Introduction to C# Raimonds Rudmanis Senior Consultant Microsoft Baltic.
Writing Object Oriented Software with C#. C# and OOP C# is designed for the.NET Framework  The.NET Framework is Object Oriented In C#  Your access to.
C#/.NET Jacob Lewallen. C# vs.NET.NET is a platform. Many languages compile to.NET: –VB.NET –Python.NET –Managed C++ –C#
C# Language Design Peter Hallam Software Design Engineer C# Compiler Microsoft Corporation.
Microsoft.NET Programming platform for the next decade Anders Hejlsberg Distinguished Engineer Developer Division.
Lecture 9 Concepts of Programming Languages
ASP.NET Programming with C# and SQL Server First Edition
Peter Juszczyk CS 492/493 - ISGS. // Is this C# or Java? class TestApp { static void Main() { int counter = 0; counter++; } } The answer is C# - In C#
Programming Handheld and Mobile devices 1 Programming of Handheld and Mobile Devices Lecture 20 Microsoft’s Approach 3 – C# Rob Pooley
Platforms and tools for Web Services and Mobile Applications Introduction to C# Bent Thomsen Aalborg University 3rd and 4th of June 2004.
Differences between C# and C++ Dr. Catherine Stringfellow Dr. Stewart Carpenter.
Programming in C# Language Overview
OOP Languages: Java vs C++
Object Oriented Programming in C# Keith Pijanowski.Net Developer Evangelist Microsoft Corporation.
1.  C# is the first “component oriented” language in the C/C++ family  Everything is an object  Component concepts are first class:  Properties, methods,
Java2C# Antonio Cisternino Part II. Outline Array types Enum types Value types  differences from classes  boxing and unboxing Delegate types  Base.
Distributed Systems (236351) Tutorial 1 - Getting Started with Visual Studio C#.NET.
Algorithm Programming Bar-Ilan University תשס"ח by Moshe Fresko.
Introduction to C# C# is - elegant, type-safe, object oriented language enabling to build applications that run on the.NET framework - types of applications.
C#C# Introduction CS3260 Dennis A. Fairclough Version 1.0 Introduction CS3260 Dennis A. Fairclough Version 1.0.
Introduction to C # – Part 2 Stephen Turner Software Design Engineer Microsoft UK.
Component Programming with C# and.NET. C# components The most commonly used components in.NET are the visual controls that you add to Windows Forms such.
Advanced C # Mark Sapossnek CS 594 Computer Science Department Metropolitan College Boston University.
Introduction to C#  Enterprise Application  Combines High productivity of RAD & raw power of C.
Introduction to C # – Part 1 Stephen Turner Software Design Engineer Microsoft UK.
Applied Computing Technology Laboratory QuickStart C# Learning to Program in C# Amy Roberge & John Linehan November 7, 2005.
Introduction to C#. C# – The Big Ideas The first component oriented language in the C/C++ family Everything.
ILM Proprietary and Confidential -
C# EMILEE KING. HISTORY OF C# In the late 1990’s Microsoft recognized the need to be able to develop applications that can run on multiple operating system.
C# Classes and Inheritance CNS 3260 C#.NET Software Development.
Computing with C# and the.NET Framework Chapter 2 C# Programming Basics ©2003, 2011 Art Gittleman.
Introduction to C# Ali vatankhah. C# – The Big Ideas The first component oriented language in the C/C++ family The first component oriented language in.
Harsh Jegadeesan (CSD) Introduction to C#. Harsh Jegadeesan (CSD) C# – The Big Ideas The first component oriented language in the C/C++ family Everything.
C# C1 CSC 298 Elements of C# code (part 1). C# C2 Style for identifiers  Identifier: class, method, property (defined shortly) or variable names  class,
Bill Campbell, UMB Microsoft's.NET C# and The Common Language Runtime.
1 9/6/05CS360 Windows Programming CS360 Windows Programming.
Object Oriented Software Development 4. C# data types, objects and references.
Introduction to C# By: Abir Ghattas Michel Barakat.
Classes Single inheritance Single inheritance Multiple interface implementation Multiple interface implementation Class members Class members  Constants,
Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.
Session 02 Module 3: Statements and Operators Module 4: Programming constructs Module 5: Arrays.
Introduction to Web Application
C# Fundamentals An Introduction. Before we begin How to get started writing C# – Quick tour of the dev. Environment – The current C# version is 5.0 –
Introduction C# program is collection of classes Classes are collection of methods and some statements That statements contains tokens C# includes five.
Java and C# - Some Commonalities Compile into machine-independent, language- independent code which runs in a managed execution environment Garbage Collection.
INTRODUCTION BEGINNING C#. C# AND THE.NET RUNTIME AND LIBRARIES The C# compiler compiles and convert C# programs. NET Common Language Runtime (CLR) executes.
C# – The Big Ideas The first component oriented language in the C/C++ family Everything really is an object Next generation robust and durable software.
The 100% Inspiration Tour.
Basic Introduction to C#
Module 5: Common Type System
Microsoft .NET 3. Language Innovations Pan Wuming 2017.
Computing with C# and the .NET Framework
Structs.
CS360 Windows Programming
.NET and .NET Core 5.2 Type Operations Pan Wuming 2016.
Lecture 9 Concepts of Programming Languages
Module 2 Variables, Assignment, and Data Types
Java Programming Language
The essence of C# and. Net adopted from Anders Hejlsberg (
Lecture 9 Concepts of Programming Languages
C# – The Big Ideas The first component oriented language in the C/C++ family The first component oriented language in the C/C++ family Everything really.
Presentation transcript:

Introduction to C# Adapted from : Anders Hejlsberg, Microsoft CSCE 5013: Hot Topics in Mobile and Pervasive Computing Nilanjan Banerjee University of Arkansas Fayetteville, AR

C# – The Big Ideas The first component oriented language in the C/C++ family The first component oriented language in the C/C++ family Everything really is an object Everything really is an object Next generation robust and durable software Next generation robust and durable software Preservation of investment Preservation of investment

C# – The Big Ideas A component oriented language C# is the first “component oriented” language in the C/C++ family C# is the first “component oriented” language in the C/C++ family Component concepts are first class: Component concepts are first class:  Properties, methods, events  Design-time and run-time attributes  Integrated documentation using XML Enables one-stop programming Enables one-stop programming  No header files, IDL, etc.  Can be embedded in web pages

C# – The Big Ideas Everything really is an object Traditional views Traditional views  C++, Java: Primitive types are “magic” and do not interoperate with objects  Smalltalk, Lisp: Primitive types are objects, but at great performance cost C# unifies with no performance cost C# unifies with no performance cost  Deep simplicity throughout system Improved extensibility and reusability Improved extensibility and reusability  New primitive types: Decimal, SQL…  Collections, etc., work for all types

C# – The Big Ideas Robust and durable software Garbage collection Garbage collection  No memory leaks and stray pointers Exceptions Exceptions  Error handling is not an afterthought Type-safety Type-safety  No uninitialized variables, unsafe casts Versioning Versioning  Pervasive versioning considerations in all aspects of language design

C# – The Big Ideas Preservation of Investment C++ heritage C++ heritage  Namespaces, enums, unsigned types, pointers (in unsafe code), etc.  No unnecessary sacrifices Interoperability Interoperability  What software is increasingly about  MS C# implementation talks to XML, SOAP, COM, DLLs, and any.NET language Millions of lines of C# code in.NET Millions of lines of C# code in.NET  Short learning curve  Increased productivity

Hello World using System; class Hello { static void Main() { static void Main() { Console.WriteLine("Hello world"); Console.WriteLine("Hello world"); }}

C# Program Structure Namespaces Namespaces  Contain types and other namespaces Type declarations Type declarations  Classes, structs, interfaces, enums, and delegates Members Members  Constants, fields, methods, properties, indexers, events, operators, constructors, destructors Organization Organization  No header files, code written “in-line”  No declaration order dependence

C# Program Structure using System; namespace System.Collections { public class Stack public class Stack { Entry top; Entry top; public void Push(object data) { public void Push(object data) { top = new Entry(top, data); top = new Entry(top, data); } public object Pop() { public object Pop() { if (top == null) throw new InvalidOperationException(); if (top == null) throw new InvalidOperationException(); object result = top.data; object result = top.data; top = top.next; top = top.next; return result; return result; } }}

Type System Value types Value types  Directly contain data  Cannot be null Reference types Reference types  Contain references to objects  May be null int i = 123; string s = "Hello world"; 123 i s "Hello world"

Type System Value types Value types  Primitives int i;  Enums enum State { Off, On }  Structs struct Point { int x, y; } Reference types Reference types  Classes class Foo: Bar, IFoo {...}  Interfaces interface IFoo: IBar {...}  Arrays string[] a = new string[10];  Delegates delegate void Empty();

Predefined Types C# predefined types C# predefined types  Reference object, string  Signed sbyte, short, int, long  Unsigned byte, ushort, uint, ulong  Character char  Floating-point float, double, decimal  Logical bool Predefined types are simply aliases for system-provided types Predefined types are simply aliases for system-provided types  For example, int == System.Int32

Classes Single inheritance Single inheritance Multiple interface implementation Multiple interface implementation Class members Class members  Constants, fields, methods, properties, indexers, events, operators, constructors, destructors  Static and instance members  Nested types Member access Member access  public, protected, internal, private

Structs Like classes, except Like classes, except  Stored in-line, not heap allocated  Assignment copies data, not reference  No inheritance Ideal for light weight objects Ideal for light weight objects  Complex, point, rectangle, color  int, float, double, etc., are all structs Benefits Benefits  No heap allocation, less GC pressure  More efficient use of memory

Classes And Structs class CPoint { int x, y;... } class CPoint { int x, y;... } struct SPoint { int x, y;... } CPoint cp = new CPoint(10, 20); SPoint sp = new SPoint(10, 20); sp cp CPoint

Interfaces Multiple inheritance Multiple inheritance Can contain methods, properties, indexers, and events Can contain methods, properties, indexers, and events Private interface implementations Private interface implementations interface IDataBound { void Bind(IDataBinder binder); void Bind(IDataBinder binder);} class EditBox: Control, IDataBound { void IDataBound.Bind(IDataBinder binder) {...} void IDataBound.Bind(IDataBinder binder) {...}}

Enums Strongly typed Strongly typed  No implicit conversions to/from int  Operators: +, -, ++, --, &, |, ^, ~ Can specify underlying type Can specify underlying type  Byte, short, int, long enum Color: byte { Red = 1, Red = 1, Green = 2, Green = 2, Blue = 4, Blue = 4, Black = 0, Black = 0, White = Red | Green | Blue, White = Red | Green | Blue,}

Delegates Object oriented function pointers Object oriented function pointers Multiple receivers Multiple receivers  Each delegate has an invocation list  Thread-safe + and - operations Foundation for events Foundation for events delegate void MouseEvent(int x, int y); delegate double Func(double x); Func func = new Func(Math.Sin); double x = func(1.0);

Unified Type System Everything is an object Everything is an object  All types ultimately inherit from object  Any piece of data can be stored, transported, and manipulated with no extra work Stream MemoryStreamFileStream Hashtabledoubleint object

Unified Type System Boxing Boxing  Allocates box, copies value into it Unboxing Unboxing  Checks type of box, copies value out int i = 123; object o = i; int j = (int)o; 123 i o 123 System.Int j

Unified Type System Benefits Benefits  Eliminates “wrapper classes”  Collection classes work with all types  Replaces OLE Automation's Variant Lots of examples in.NET Framework Lots of examples in.NET Framework string s = string.Format( "Your total was {0} on {1}", total, date); "Your total was {0} on {1}", total, date); Hashtable t = new Hashtable(); t.Add(0, "zero"); t.Add(1, "one"); t.Add(2, "two");

Component Development What defines a component? What defines a component?  Properties, methods, events  Integrated help and documentation  Design-time information C# has first class support C# has first class support  Not naming patterns, adapters, etc.  Not external files Components are easy to build and consume Components are easy to build and consume

Properties Properties are “smart fields” Properties are “smart fields”  Natural syntax, accessors, inlining public class Button: Control { private string caption; private string caption; public string Caption { public string Caption { get { get { return caption; return caption; } set { set { caption = value; caption = value; Repaint(); Repaint(); } }} Button b = new Button(); b.Caption = "OK"; String s = b.Caption;

Indexers Indexers are “smart arrays” Indexers are “smart arrays”  Can be overloaded public class ListBox: Control { private string[] items; private string[] items; public string this[int index] { public string this[int index] { get { get { return items[index]; return items[index]; } set { items[index] = value; set { items[index] = value; Repaint(); Repaint(); } }} ListBox listBox = new ListBox(); listBox[0] = "hello"; Console.WriteLine(listBox[0]);

Events Sourcing Define the event signature Define the event signature Define the event and firing logic Define the event and firing logic public delegate void EventHandler(object sender, EventArgs e); public class Button { public event EventHandler Click; protected void OnClick(EventArgs e) { if (Click != null) Click(this, e); } protected void OnClick(EventArgs e) { if (Click != null) Click(this, e); }}

Events Handling Define and register event handler Define and register event handler public class MyForm: Form { Button okButton; Button okButton; public MyForm() { public MyForm() { okButton = new Button(...); okButton = new Button(...); okButton.Caption = "OK"; okButton.Caption = "OK"; okButton.Click += new EventHandler(OkButtonClick); okButton.Click += new EventHandler(OkButtonClick); } void OkButtonClick(object sender, EventArgs e) { void OkButtonClick(object sender, EventArgs e) { ShowMessage("You pressed the OK button"); ShowMessage("You pressed the OK button"); }}

Attributes How do you associate information with types and members? How do you associate information with types and members?  Documentation URL for a class  Transaction context for a method  XML persistence mapping Traditional solutions Traditional solutions  Add keywords or pragmas to language  Use external files, e.g.,.IDL,.DEF C# solution: Attributes C# solution: Attributes

Attributes public class OrderProcessor { [WebMethod] [WebMethod] public void SubmitOrder(PurchaseOrder order) {...} public void SubmitOrder(PurchaseOrder order) {...}} [XmlRoot("Order", Namespace="urn:acme.b2b-schema.v1")] public class PurchaseOrder { [XmlElement("shipTo")] public Address ShipTo; [XmlElement("shipTo")] public Address ShipTo; [XmlElement("billTo")] public Address BillTo; [XmlElement("billTo")] public Address BillTo; [XmlElement("comment")] public string Comment; [XmlElement("comment")] public string Comment; [XmlElement("items")] public Item[] Items; [XmlElement("items")] public Item[] Items; [XmlAttribute("date")] public DateTime OrderDate; [XmlAttribute("date")] public DateTime OrderDate;} public class Address {...} public class Item {...}

Attributes Attributes can be Attributes can be  Attached to types and members  Examined at run-time using reflection Completely extensible Completely extensible  Simply a class that inherits from System.Attribute Type-safe Type-safe  Arguments checked at compile-time Extensive use in.NET Framework Extensive use in.NET Framework  XML, Web Services, security, serialization, component model, COM and P/Invoke interop, code configuration…

XML Comments class XmlElement { /// /// /// Returns the attribute with the given name and /// Returns the attribute with the given name and /// namespace /// namespace /// /// /// The name of the attribute /// The name of the attribute /// /// /// The namespace of the attribute, or null if /// The namespace of the attribute, or null if /// the attribute has no namespace /// the attribute has no namespace /// /// /// The attribute value, or null if the attribute /// The attribute value, or null if the attribute /// does not exist /// does not exist /// /// public string GetAttr(string name, string ns) { public string GetAttr(string name, string ns) { }}

Statements And Expressions High C++ fidelity High C++ fidelity If, while, do require bool condition If, while, do require bool condition goto can’t jump into blocks goto can’t jump into blocks Switch statement Switch statement  No fall-through, “goto case” or “goto default” foreach statement foreach statement Checked and unchecked statements Checked and unchecked statements Expression statements must do work Expression statements must do work void Foo() { i == 1; // error i == 1; // error}

foreach Statement Iteration of arrays Iteration of arrays Iteration of user-defined collections Iteration of user-defined collections foreach (Customer c in customers.OrderBy("name")) { if (c.Orders.Count != 0) { if (c.Orders.Count != 0) { }} public static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s); foreach (string s in args) Console.WriteLine(s);}

Parameter Arrays Can write “printf” style methods Can write “printf” style methods  Type-safe, unlike C++ void printf(string fmt, params object[] args) { foreach (object x in args) { foreach (object x in args) { }} printf("%s %i %i", str, int1, int2); object[] args = new object[3]; args[0] = str; args[1] = int1; Args[2] = int2; printf("%s %i %i", args);

Operator Overloading First class user-defined data types First class user-defined data types Used in base class library Used in base class library  Decimal, DateTime, TimeSpan Used in UI library Used in UI library  Unit, Point, Rectangle Used in SQL integration Used in SQL integration  SQLString, SQLInt16, SQLInt32, SQLInt64, SQLBool, SQLMoney, SQLNumeric, SQLFloat…

Operator Overloading public struct DBInt { public static readonly DBInt Null = new DBInt(); public static readonly DBInt Null = new DBInt(); private int value; private int value; private bool defined; private bool defined; public bool IsNull { get { return !defined; } } public bool IsNull { get { return !defined; } } public static DBInt operator +(DBInt x, DBInt y) {...} public static DBInt operator +(DBInt x, DBInt y) {...} public static implicit operator DBInt(int x) {...} public static implicit operator DBInt(int x) {...} public static explicit operator int(DBInt x) {...} public static explicit operator int(DBInt x) {...}} DBInt x = 123; DBInt y = DBInt.Null; DBInt z = x + y;

Versioning Problem in most languages Problem in most languages  C++ and Java produce fragile base classes  Users unable to express versioning intent C# allows intent to be expressed C# allows intent to be expressed  Methods are not virtual by default  C# keywords “virtual”, “override” and “new” provide context C# can't guarantee versioning C# can't guarantee versioning  Can enable (e.g., explicit override)  Can encourage (e.g., smart defaults)

Versioning class Derived: Base// version 1 { public virtual void Foo() { public virtual void Foo() { Console.WriteLine("Derived.Foo"); Console.WriteLine("Derived.Foo"); }} class Derived: Base// version 2a { new public virtual void Foo() { new public virtual void Foo() { Console.WriteLine("Derived.Foo"); Console.WriteLine("Derived.Foo"); }} class Derived: Base// version 2b { public override void Foo() { public override void Foo() { base.Foo(); base.Foo(); Console.WriteLine("Derived.Foo"); Console.WriteLine("Derived.Foo"); }} class Base// version 1 {} class Base // version 2 { public virtual void Foo() { public virtual void Foo() { Console.WriteLine("Base.Foo"); Console.WriteLine("Base.Foo"); }}

Conditional Compilation #define, #undef #define, #undef #if, #elif, #else, #endif #if, #elif, #else, #endif  Simple boolean logic Conditional methods Conditional methods public class Debug { [Conditional("Debug")] [Conditional("Debug")] public static void Assert(bool cond, String s) { public static void Assert(bool cond, String s) { if (!cond) { if (!cond) { throw new AssertionException(s); throw new AssertionException(s); } }}

Unsafe Code Platform interoperability covers most cases Platform interoperability covers most cases Unsafe code Unsafe code  Low-level code “within the box”  Enables unsafe casts, pointer arithmetic Declarative pinning Declarative pinning  Fixed statement Basically “inline C” Basically “inline C” unsafe void Foo() { char* buf = stackalloc char[256]; char* buf = stackalloc char[256]; for (char* p = buf; p < buf + 256; p++) *p = 0; for (char* p = buf; p < buf + 256; p++) *p = 0;......}

Unsafe Code class FileStream: Stream { int handle; int handle; public unsafe int Read(byte[] buffer, int index, int count) { public unsafe int Read(byte[] buffer, int index, int count) { int n = 0; int n = 0; fixed (byte* p = buffer) { fixed (byte* p = buffer) { ReadFile(handle, p + index, count, &n, null); ReadFile(handle, p + index, count, &n, null); } return n; return n; } [dllimport("kernel32", SetLastError=true)] [dllimport("kernel32", SetLastError=true)] static extern unsafe bool ReadFile(int hFile, static extern unsafe bool ReadFile(int hFile, void* lpBuffer, int nBytesToRead, void* lpBuffer, int nBytesToRead, int* nBytesRead, Overlapped* lpOverlapped); int* nBytesRead, Overlapped* lpOverlapped);}

More Information  Download.NET SDK and documentation  Slides and info from.NET PDC news://msnews.microsoft.com  microsoft.public.dotnet.csharp.general