Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

20
Introduction to C# Introduction to C# Anders Hejlsberg Anders Hejlsberg Distinguished Engineer Distinguished Engineer Developer Division Developer Division Microsoft Corporation Microsoft Corporation

description

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

Transcript of Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Page 1: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Introduction to C# Introduction to C#

Anders HejlsbergAnders HejlsbergDistinguished EngineerDistinguished EngineerDeveloper DivisionDeveloper DivisionMicrosoft CorporationMicrosoft Corporation

Page 2: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

C# – The Big IdeasC# – The Big Ideas The first component oriented The first component oriented

language in the C/C++ familylanguage in the C/C++ family Everything really is an objectEverything really is an object Next generation robust and Next generation robust and

durable softwaredurable software Preservation of investmentPreservation of investment

Page 3: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

C# – The Big IdeasC# – The Big IdeasA component oriented languageA component oriented language

C# is the first “component oriented” C# is the first “component oriented” language in the C/C++ familylanguage in the C/C++ family

Component concepts are first class:Component concepts are first class: Properties, methods, eventsProperties, methods, events Design-time and run-time attributesDesign-time and run-time attributes Integrated documentation using XMLIntegrated documentation using XML

Enables one-stop programmingEnables one-stop programming No header files, IDL, etc.No header files, IDL, etc. Can be embedded in web pagesCan be embedded in web pages

Page 4: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

C# – The Big IdeasC# – The Big IdeasEverything really is an objectEverything really is an object

Traditional viewsTraditional views C++, Java: Primitive types are “magic” and do C++, Java: Primitive types are “magic” and do

not interoperate with objectsnot interoperate with objects Smalltalk, Lisp: Primitive types are objects, but Smalltalk, Lisp: Primitive types are objects, but

at great performance costat great performance cost C# unifies with no performance costC# unifies with no performance cost

Deep simplicity throughout systemDeep simplicity throughout system Improved extensibility and reusabilityImproved extensibility and reusability

New primitive types: Decimal, SQL…New primitive types: Decimal, SQL… Collections, etc., work for Collections, etc., work for all all typestypes

Page 5: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

C# – The Big IdeasC# – The Big IdeasRobust and durable softwareRobust and durable software

Garbage collectionGarbage collection No memory leaks and stray pointersNo memory leaks and stray pointers

ExceptionsExceptions Error handling is not an afterthoughtError handling is not an afterthought

Type-safetyType-safety No uninitialized variables, unsafe castsNo uninitialized variables, unsafe casts

VersioningVersioning Pervasive versioning considerations in Pervasive versioning considerations in

all aspects of language designall aspects of language design

Page 6: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

C# – The Big IdeasC# – The Big IdeasPreservation of InvestmentPreservation of Investment

C++ heritageC++ heritage Namespaces, enums, unsigned types, pointers Namespaces, enums, unsigned types, pointers

(in unsafe code), etc.(in unsafe code), etc. No unnecessary sacrificesNo unnecessary sacrifices

InteroperabilityInteroperability What software is increasingly aboutWhat software is increasingly about MS C# implementation talks to XML, SOAP, MS C# implementation talks to XML, SOAP,

COM, DLLs, and any .NET languageCOM, DLLs, and any .NET language Millions of lines of C# code in .NETMillions of lines of C# code in .NET

Short learning curveShort learning curve Increased productivityIncreased productivity

Page 7: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Hello WorldHello Worldusing System;using System;

class Helloclass Hello{{ static void Main() {static void Main() { Console.WriteLine("Hello world");Console.WriteLine("Hello world"); }}}}

Page 8: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

C# Program StructureC# Program Structure NamespacesNamespaces

Contain types and other namespacesContain types and other namespaces Type declarationsType declarations

Classes, structs, interfaces, enums, Classes, structs, interfaces, enums, and delegatesand delegates

MembersMembers Constants, fields, methods, properties, indexers, Constants, fields, methods, properties, indexers,

events, operators, constructors, destructorsevents, operators, constructors, destructors OrganizationOrganization

No header files, code written “in-line”No header files, code written “in-line” No declaration order dependenceNo declaration order dependence

Page 9: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

C# Program StructureC# Program Structureusing System;using System;

namespace System.Collectionsnamespace System.Collections{{ public class Stackpublic 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; }} }}}}

Page 10: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Type SystemType System Value typesValue types

Directly contain dataDirectly contain data Cannot be nullCannot be null

Reference typesReference types Contain references to objectsContain references to objects May be nullMay be null

int i = 123;int i = 123;string s = "Hello world";string s = "Hello world";

123123ii

ss "Hello world""Hello world"

Page 11: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Type SystemType System Value typesValue types

PrimitivesPrimitives int i;int i; EnumsEnums enum State { Off, On }enum State { Off, On } StructsStructs struct Point { int x, y; }struct Point { int x, y; }

Reference typesReference types ClassesClasses class Foo: Bar, IFoo {...}class Foo: Bar, IFoo {...} InterfacesInterfaces interface IFoo: IBar {...}interface IFoo: IBar {...} ArraysArrays string[] a = new string[10];string[] a = new string[10]; DelegatesDelegates delegate void Empty();delegate void Empty();

Page 12: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Predefined TypesPredefined Types C# predefined typesC# predefined types

ReferenceReference object, string object, string SignedSigned sbyte, short, int, long sbyte, short, int, long Unsigned Unsigned byte, ushort, uint, ulong byte, ushort, uint, ulong CharacterCharacter char char Floating-pointFloating-point float, double, decimal float, double, decimal LogicalLogical bool bool

Predefined types are simply aliases Predefined types are simply aliases for system-provided typesfor system-provided types For example, int == System.Int32For example, int == System.Int32

Page 13: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

StructsStructs Like classes, exceptLike classes, except

Stored in-line, not heap allocatedStored in-line, not heap allocated Assignment copies data, not referenceAssignment copies data, not reference No inheritanceNo inheritance

Ideal for light weight objectsIdeal for light weight objects Complex, point, rectangle, colorComplex, point, rectangle, color int, float, double, etc., are all structsint, float, double, etc., are all structs

BenefitsBenefits No heap allocation, less GC pressureNo heap allocation, less GC pressure More efficient use of memoryMore efficient use of memory

Page 14: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Classes And StructsClasses And Structs class CPoint { int x, y; ... }class CPoint { int x, y; ... }struct SPoint { int x, y; ... }struct SPoint { int x, y; ... }

CPoint cp = new CPoint(10, 20);CPoint cp = new CPoint(10, 20);SPoint sp = new SPoint(10, 20);SPoint sp = new SPoint(10, 20);

1010

2020spsp

cpcp

1010

2020

CPointCPoint

Page 15: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

EnumsEnums Strongly typedStrongly typed

No implicit conversions to/from intNo implicit conversions to/from int Operators: +, -, ++, --, &, |, ^, ~Operators: +, -, ++, --, &, |, ^, ~

Can specify underlying typeCan specify underlying type Byte, short, int, longByte, short, int, long

enum Color: byteenum 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,}}

Page 16: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Unified Type SystemUnified Type System BoxingBoxing

Allocates box, copies value into itAllocates box, copies value into it UnboxingUnboxing

Checks type of box, copies value outChecks type of box, copies value out

int i = 123;int i = 123;object o = i;object o = i;int j = (int)o;int j = (int)o;

123123i

o123123

System.Int32System.Int32

123123j

Page 17: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Unified Type SystemUnified Type System BenefitsBenefits

Eliminates “wrapper classes”Eliminates “wrapper classes” Collection classes work with all typesCollection classes work with all types Replaces OLE Automation's VariantReplaces OLE Automation's Variant

Lots of examples in .NET FrameworkLots of examples in .NET Frameworkstring s = string.Format(string s = string.Format( "Your total was {0} on {1}", total, date);"Your total was {0} on {1}", total, date);

Hashtable t = new Hashtable();Hashtable t = new Hashtable();t.Add(0, "zero");t.Add(0, "zero");t.Add(1, "one");t.Add(1, "one");t.Add(2, "two");t.Add(2, "two");

Page 18: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Component DevelopmentComponent Development What defines a component?What defines a component?

Properties, methods, eventsProperties, methods, events Integrated help and documentationIntegrated help and documentation Design-time informationDesign-time information

C# has first class supportC# has first class support Not naming patterns, adapters, etc.Not naming patterns, adapters, etc. Not external filesNot external files

Components are easy to build Components are easy to build and consumeand consume

Page 19: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

Statements And Statements And ExpressionsExpressions High C++ fidelityHigh C++ fidelity If, while, do require bool conditionIf, while, do require bool condition goto can’t jump into blocksgoto can’t jump into blocks Switch statementSwitch statement

No fall-through, “goto case” or “goto default”No fall-through, “goto case” or “goto default” foreach statementforeach statement Checked and unchecked statementsChecked and unchecked statements Expression statements must do workExpression statements must do work

void Foo() {void Foo() { i == 1; // errori == 1; // error}}

Page 20: Introduction to C# Anders Hejlsberg Distinguished Engineer Developer Division Microsoft Corporation.

foreach Statementforeach Statement Iteration of arraysIteration of arrays

Iteration of user-defined collectionsIteration of user-defined collections

foreach (Customer c in customers.OrderBy("name")) {foreach (Customer c in customers.OrderBy("name")) { if (c.Orders.Count != 0) {if (c.Orders.Count != 0) { ...... }}}}

public static void Main(string[] args) {public static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s);foreach (string s in args) Console.WriteLine(s);}}