.NET Whirlwind Intro

acceptableseashoreΑσφάλεια

5 Νοε 2013 (πριν από 3 χρόνια και 7 μήνες)

124 εμφανίσεις

.NET Whirlwind Intro

for Rice

Michael Stuart

Sr. Consultant

mstuart@microsoft.com

Will Rice class of 1991

Chris Wafer

Lowly Consultant

cwafer@microsoft.com

Jones class of 2000

Outline


Who are we? (not an existential conundrum)


What is .NET?


Marketing mantra vs. reality


Platform…for web services


Tools

Visual Studio


2002 vs. 2003, RTM vs. Everett vs. Whidbey


Mongo debugging, templates, visual designers


.NET Framework Overview


CLR, CTS, CLI


OO, JIT, GC


Practical development with .NET


OO, design patterns


Mobile development


.NET CF (Compact Framework)


Web Services


Questions

Who are we?


Chris



Recent Rice grad, real CS not flaky other pseudo
-
science


Consultant at Microsoft in South Region


Specializes in .NET development


Fingers possessed by l33t hax0rs of yore


Thinks M3 is faster than M
-
Coupe, too young to
know better


Michael



Lovable but slightly addled uncle
-
type


Old Rice grad

Biochem/Bio+PoliSci, M.D.


Hacker of old, cut teeth in 6502 Assembler


Specialized in .NET dev


Currently working with PAG team on patterns

What is .NET?


Marketing mantra vs. reality


.NET Framework

Visual Studio, actual runtime,
languages, web services are _really_ “.NET”


“.NET Servers”

are
.NET enabled

but not
necessarily written in .NET (CS2k, BizTalk…)


Platform…for web services


Much more to
-
the
-
point:
.NET is a platform for Web
Services


Other


Loosely
-
coupled programming model


New paradigm for Microsoft
-
based developers


Much easier to write good code


Focus on logic, not plumbing

we’ll wear the
plumber jeans


Tools


2002 vs. 2003, RTM vs. Everett vs. Whidbey


VS.NET

complete

tool for developing .NET (and
old
-
school) software


Encompasses all languages

C#, VB.NET, J#, 20+
others


RTM

Framework v. 1.0.3705


Everett

currently beta, v. 1.1.4322


Whidbey

future, big changes (generics, built
-
in
patterns, etc.)


Mongo debugging, templates, visual designers


Debugging

over the river, through the woods…


Templates

strong future


Designers

beloved RAD tools, beefier
underpinnings now

.NET Framework Overview


CLR, CTS, CLI


OO, JIT, GC

.NET Framework Overview 2

Infrastructure for the .NET Platform


Common Language Runtime


Manages running code


Verifies type safety


Provides garbage collection, error handling,
threading


Security


Provides common type system


Provides access to system resources


Native API, COM interop, etc.


A collection of unified classes

CLR

Executes code, maintains
security, handles component
“plumbing” and dependencies

Visual Basic .NET

C#

ASP

.NET

ADO

.NET

Enterprise
Services

CLR

MSMQ

COM+

Active

Directory

IIS

WMI

Win32

.NET Framework Overview 3

Win32 and the .NET Framework

XML Web Services and Scripting

High
-
productivity environment

for building and operating XML
Web

services

XML and Data Access

ADO .NET interfaces any
database, loosely coupled data
access and native XML data
format; leverages the huge
library of ODBC OLE DB drivers

Enterprise Services

The services required for mission
critical applications: Transactions,
Messaging, Partitions, Object
Pooling and Events

Unified Class libraries

Unifies Programming
models across languages

Factored for extensibility

Designed for tools

Visual J#...

COM: Not
Dead Yet

.NET Framework Overview 3


CLR Duties


Manages running code


Threading


Memory management / GC


JIT to native


COM Interop


Security, type safety, bounds checks, assembly
loading, remoting, etc. (all runtime stuff)


Fine
-
grained evidence
-
based security


Code access security


IL can be verified to guarantee type safety


No unsafe casts, no un
-
initialized variables and
no

out
-
of
-
bounds array indexing


Role
-
based security


Integrated with underlying OS

.NET Framework Overview 4


Compilation and Execution

Compilation

Before
execution
(ngen) or the
first time each
method is called

Execution

JIT
Compiler

Native

Code

MSIL

Code

Metadata

Source
Code

Language
Compiler

ILDASM!


IL_000c: br.s IL_002a


IL_000e: ldloc.1


IL_000f: callvirt instance
object
[mscorlib]System.Collections.
IEnumerator::get_Current()


IL_0014: castclass
[mscorlib]System.String


IL_0019: stloc.0


IL_001a: ldstr "Flea's
name : "

.NET Framework Overview 4


Simplified Development


Eliminates COM
plumbing


No more …


Registration


GUIDs


.IDL files


HRESULTs


IUnknown


AddRef/Release


CoCreateInstance

=>self describing components

=>hierarchical namespaces

=>source code to metadata

=>structured exceptions

=>root object class

=>garbage collector

=>”new” operator

Practical Development with .NET


Demo

how to set up quickie web service
(asmx)


Demo

web
-
service
-
based Forth calculator


Demo

Interfaces and Abstracts


Demo

Virtual vs. Non
-
Virtual calls


Debugging down to the metal:


Memory view


Register view


X86 ASM view


Demo

delegates and events


Demo

how to screw up Boxing/Unboxing


Demo

UIP “pet project”


Demo

database access application (??)

Practical Development with .NET


Demo

how to set up quickie web service
(asmx)


Basic web service requires ASMX file + code


ASP.NET HttpModule hooks up ASMX to code


Compiles and JIT’s code


Generates WSDL dynamically (SOAP contract)


Core syntax:


<%@ WebService Language="c#" Class="Calculator " %>


[WebMethod]


(try THAT in J2EE


)

Practical Development with .NET


Demo

web
-
service
-
based Forth calculator


Now consume the calculator web service we made


Uses stack
-
based calc


Uses Compact Framework


Accesses web service from Pocket PC device


Note use of derived stack



IN FUTURE FRAMEWORK,
GENERICS

will do this


Practical Development with .NET


Demo

Interfaces and Abstracts


.NET supports


Multiple interface implementation


Single inheritance

NO multiple inheritance


Abstract base class


Base functionality


Not instantiable


Good use: “is a kind of”, abstract entity meaningless



Mammal abstract base

but there’s no plain “mammal” animal


Lion : Mammal

concrete derivative has meaning but borrows
basic functionality such as sleep, heartbeat from abstract


Interface implementation


Heavy use of “marker” interfaces in .NET (IDisposable)


Provides strict contractual obligation


No base functionality

Practical Development with .NET


Demo

Virtual vs. Non
-
Virtual calls


Non
-
default virtual in .NET


Public void Foo() in class A


Public new void Foo() in Class B : A


B.Foo does B.Foo; ((A)B).Foo does A.Foo


Public virtual void Foo() in class C


Public override void Foo() in Class D : C


D.Foo does D.Foo; ((C)D).Foo STILL does D.Foo


Be careful of deep inheritance chains


If middle of chain does “new”, THAT is where it stops!


UNLESS you play games with versioning


.NET avoids “Base Class Fragility” with versioning!

Practical Development with .NET


Demo

delegates and events


Fundamental Rule #1:


“A Delegate is a Type
-
Safe Function Pointer!”


James Gosling (father of Java) calls Anders Heljsberg “Mr.
Function Pointers”


Anders is too polite to respond



Delegate syntax:


public delegate void DoneCookingDelegate();


Delegates are always multi
-
cast; you can chain
them up


Delegates can be declared anywhere; if they’re
accessible they’re good


Delegates point to a concrete endpoint that
matches signatures


EVENTS in .NET are special
-
case delegates

Practical Development with .NET


Demo

how to screw up Boxing/Unboxing


How is .NET
so FAST?


Singly
-
rooted hierarchy;


ALL objects derive from System.Object

ints, strings,
doubles, even kids with chickenpox


An Int32 is an object
if you treat it like one
, otherwise it’s
stack
-
allocated


Value Types vs. Reference Types


Value types go on stack

int, double, long, struct, double,
decimal, uint, etc.


Reference types are officially objects all the time and go on
HEAP


.NET can BOX

convert value type to ref type


.NET can UNBOX

convert ref to value


Be Careful

boxing implicit, unboxing explicit

QUESTIONS???

Thank you all Very Much!


Michael Stuart

mstuart@microsoft.com

Chris Wafer

cwafer@microsoft.com