c# ja - cs.tut.figrako/2008/luennot/net_c_2008.pdfc# - ”c-sharp” • kieli, jossa pyritään...

58
C# ja .NET Juha Järvensivu [email protected] 2008

Upload: dohuong

Post on 03-Apr-2018

257 views

Category:

Documents


5 download

TRANSCRIPT

C# ja .NET

Juha Jä[email protected]

2008

Sisältö

• C#– Propertyt– Delegaatit– Eventit

• .NET-ajoympäristö• .NET luokkakirjasto

C# - ”C-sharp”

• Kieli, jossa pyritään yhdistämään C++:ntehokkuus ja Javan helppokäyttöisyys

• Suunniteltu erityisesti .NET-ohjelmointiin

Standard ECMA-334C# Language Specification

C#:n ja Java

• Virtuaalikone (välikoodi)• Automaattinen roskienkeruu• Kaikilla luokilla yhteinen kantaluokka

(object)• Rajapinnat• Ei moniperintää• Ei otsikkotiedostoja

C# ja C++

• Perustietotyypit• Enumit• Virtual avainsana• class != struct• Mahdollisuus osoittimien käyttöön• Syntaksi saman kaltaista

C# - tyyppijärjestelmä

Property(Ominaisuus)

Viime viikon esimerkistä:

void value1_TextChanged(object sender, EventArgs e){

button1.Enabled = (textBox1.Text != " " ) &&(textBox2.Text != " ");

}

struct Point{

private int x, y; // private fields

public Point (int x, int y) // constructor{

this.x = x;this.y = y;

}

public int X // property{

get {return x;}set {x = value;}

}

public int Y{

get {return y;}set {y = value;}

}}

Property (ominaisuus)

• Korvaa get- ja set-funktiot• Funktio, jota käytetään kuten muuttujaa• Tavoitteena tehdä koodista

helppolukuisempaa

Testifor(int i = 0; i < Int32.MaxValue; i++){

// päivitä muuttujan arvo}

• Debug:– Public muuttuja : 19.832s– Set-funktio : 35.995s– Property : 36.182s

• Release:– Public muuttuja : 5.548s– Property : 5.564s– Set-funktio : 5.532s

Delegaatti

Viime viikon esimerkistä:this.textBox1.KeyPress += newKeyPressEventHandler(onlyNumber);

void onlyNumber(object sender, KeyPressEventArgs e){

if (!char.IsDigit(e.KeyChar)){

e.Handled = true;}

}

Delegaatti-mekanismi

• referenssityyppi, joka voi osoittaa useaanmetodiin samanaikaisesti ”Metodiosoitin”

D

Delegaatti

A

Metodit

B

C

Delegaatin esittely

public class MyClass{

// Delegaatin esittelypublic delegate void MyDelegate();// Delegaatin luontiMyDelegate delegateMember;

}

Kuuntelijan rekisteröintidelegaattiin

MyClass c1;c1.delegateMember += new MyDelegate(myHandler);

void myHandler(){// TODO: add implementation here

}

Delegaatin kutsuminen

- Kuten tavallinen funktiokutsu- Funktiokutsu välitetään kaikille rekisteröityneille

kuuntelijoille

MyClass::FunctionX(){

this.delegateMember( );}

Event

eventin esittely

public class MyClass{

// Delegaatin esittelypublic delegate void MyEvent(object sender,EventData eventData);// eventin luontievent MyEvent EventMember;

}

event

• Määre, joka muuttaa delegaatinkäyttäytymistä

1. voidaan sisällyttää rajapintaluokkiin2. voidaan kutsua vain luokasta, jonka

jäsenmuuttujana muuttuja on.3. luokan ulkopuolelta vain metodien lisäys ja

poisto += ja -= operaatioilla

Kuuntelijan rekisteröintieventtiin

MyClass c1;c1.EventMember += new MyEvent(myHandler);

void myHandler(object sender, EventData eventData){// TODO: add implementation here

}

Eventin kutsuminenMyClass::FunctionX(){

onMyEvent(new EventData);}

protected void MyClass:: OnMyEvent(EventArgs e){

if (EventMember != null){

EventMember(this, e);}

}

Perintä

Perintäclass abstract MyBaseClass{

virtual void Func1() {} // Voidaan ylimääritellä

abstract void Func2(); // Täytyy ylimääritellä

}

class MyClass : MyBaseClass{

override void FuncX() {} // Ylimääritellään

sealed override void FuncX() {} // Ei voi ylimääritellä uudelleen}

Olion tyypin selvittäminen

• Avainsanan is avulla

// determined if an object is compatible with// the string typeif(obj is string){}

Value types vs Reference types

// value type (struct) // Reference type (class)Point p; Form f;p = new Point(); f = new Form;

Stack Heap

P (x, y)

F Form object

.NET luokkakirjastot

ISBN0735615551

.NET kirjasto

• Ei sidottu tiettyyn ohjelmointikieleen// C#public void CreateMyForm(){

// Create a new instance of the form.Form form1 = new Form();// Create two buttonsButton button1 = new Button ();Button button2 = new Button ();// Set the text of button1 to "OK".button1.Text = "OK";

}

// Visual BasicPublic Sub CreateMyForm()

' Create a new instance of the form.Dim form1 As New Form()' Create two buttonsDim button1 As New Button()Dim button2 As New Button()' Set the text of button1 to "OK".button1.Text = "OK"

.NET kirjasto

Common Language Runtime (CLR)

Base Class Libraries (BCL)

Data and XML Classes (ADO.NET)

XML Web Services Web Forms Windows Forms

ASP.NET

.NET kirjasto

Common Language Runtime (CLR)

Base Class Libraries (BCL)

Data and XML Classes (ADO.NET)

XML Web Services Web Forms Windows Forms

ASP.NET

Base Class Libraries (BCL)• Peruskirjasto, joka käytettävissä kaikissa .NET-

ohjelmointikielissä

System.Stringstring

System.Booleanbool

System.Int32int

.NETC#

System.Collections• Sisältää rajapintoja ja säiliöluokkia (taulukko, lista

hajautustaulu jne)• mscorlib.dll• Esimerkki: dynaaminen taulukko

ArrayList myList = new ArrayList(2);myList.Add(”item1”);myList.Add(”item2”);foreach(string s in myList){

Console.WriteLine(s);}

System.Windows.Forms

• Käyttöliittymäkirjasto– Control

• Käyttöliittymäelementtien kantaluokka– Panel

• Sisältää UI-kontrollit– User Control

• Toimii kantaluokka ohjelmoijan omille kontrolleille• ”tyhjä kontrolli”

System.Windows.Forms

Component

Control Common Dialog

PanelUserControl Button OpenFileDialog SaveFileDialog

Forn

ToolTip

System.Drawing

• Sisältää pikseligrafiikan piirtoon tarvittavat luokat– System.Drawing

• Brush, Font, Pen, Color, Size, Point...

– System.Drawing.Drawing2D• Sisältää kehittyneempiä piirtofunktioita

– System.Drawing.Imaging• Sisältää kehittyneempiä luokkia kuvien käsittelyyn

– System.Drawing.Text• Sisältää kehittyneempiä luokkia tekstin piirtoon

.NET 1.0 .NET 2.0

• MenuStrip (ennen MainMenu)• ToolStrip (ennen ToolBar)

– ToolStripButton, ToolStripProgressBar• StatusStrip• BackgroundWorker• Visual Studio 2008 mukana julkaistiin myös uusi

.NET 3.0 ja C# 3.0– Ei merkittäviä uudistuksia käyttöliittymä-osuuteen

.NET ajoympäristö

Juha Jä[email protected]

2007

Käännösprosessi

CIL-

tavukoodiC# lähdekoodi C# kääntäjä JIT-

käännösAjettava

natiivikoodi

Kehitysympäristössäohjelmoijan toimesta

Ajonaikana .NETajoympäristön

toimesta

CLR – Execution engine

MyApp.exe

MyLib.dll

MyApp.code

MyLib.codeJIT

COMPILER

JIT-käännös

CILvälikoodi

Common Language Runtime (CLR)

• .NET ajonaikainensuoritusympäristö (vrt javanvirtuaalikone)

• Tehtävät– Kääntää CIL-välikoodin

ajonaikaisesti konekoodiksi– Huolehtii muistinhallinnasta– Tietotyyppitarkistuksista– Turvallisuustarkistuksista– Poikkeuskäsittelystä

Termistöä

CIL

• Common Intermediate Language• CIL = MSIL = IL• Välikieli (vrt Java bytecode)• Käännetään suorituksen aikana

konekoodiksi käyttäen JIT-käännöstä

Assembly

• Pienin yksittäinen asennettava yksikkö• dll tai exe tiedosto• Koostuu

– CIL-koodista– Metadatasta– Manifestista– Resurssitiedostoista (optionaalinen)

Metadata

• Sisältää metatietoa CIL-koodista• Kuvaa assemblyn sisällön

ohjelmointikieliriippumattomalla tavalla• Tyyppien kuvaukset (luokka, rajapinta jne)

– Nimi, näkyvyys, kantaluokka, toteutetut rajapinnat.– Jäsenet (metodit, muuttujat, propertyt, eventit).

• Kääntäjä generoi metadatan automaattisesti

Manifesti

• Assemblyn metadataa• Sisältö

– Versionumero– Culture information– Lista assemblyn sisältämistä tyypeistä– Lista viittauksista muihin assemblyihin

• Kääntäjä generoi manifestin automaattisesti

Assembly

Manifest

Metadata

CIL code

Resources (optional)

• Hallittu koodi (Managed code)– CLR:n hallinnassa ajettava koodi

• Ei hallittu koodi (Unmanaged code)– Natiivikoodi, jota ei ajeta clr:n hallinnassa

• Managed heap– CLR:n prosessille sen luontivaiheessa varaama

muistialue• Multi-file Assembly

– Assembly, joka koostuu useammasta tiedostosta(primary ja secondary modules)

Termistöä…

Tyyppijärjestelmä

Ohjelmointikieliriippumattomuus• .NET ohjelmia voidaan toteuttaa yli 20

ohjelmointikielellä

PythonMercuryEiffelForthVisual BasicPerlJScriptCOBOLStandard MLPascalJavaC#SmallTalkOzHaskellC++SchemeOberonFortranAPL

Lähde: http://msdn.microsoft.com/netframework/technologyinfo/overview/

CTS

• Common Type System• ”.NET tyyppijärjestelm䔕 Määrittelee kaikki .NET ajoympäristön

tukemat tietotyypit

CTS Types

• Class Type• Structure Type• Interface Type• Enumeration Type• Delegate Type

CLS

• Common Language Specification• ”Yleinen kielimääritys”• Joukko tyyppejä, jotka kaikkien

ohjelmointikielten pitää vähintään toteuttaa• CLS compliant code

– [assembly: System.CLSCompoliant(true)]

Ympäristöriippumattomuus

Standard ECMA-335Common Language Infrastructure

(CLI)• 4th edition (June 2006)• Kansainvälinen standardi, joka mahdollistaa koodin suorittamisen erilaisissa

ympäristöissä• Sisältö

– Part 1: Concepts and Architecture– Part 2: Metadata Definition– Part 3: CIL Instruction Set– Part 4: Profiles and Libraries– Part 5: Debug Interchange Format.– Part 6: Annexes – Contains some sample programs written in CIL Assembly

Language

• http://www.ecma-international.org/publications/standards/Ecma-335.htm

.NET ja Linux

• Mono-projekti www.mono-project.com– Tavoitteena luoda OSS-versio .NET-

ympäristöstä, joka mahdollistaa .NETsovellusten ajon linux ja unix ympäristöissä

Lähteet• ECM 335

– http://www.ecma-international.org/publications/standards/Ecma-335.htm• Common Type System (wiki)

– http://en.wikipedia.org/wiki/Common_Type_System• Common Type System (msdn)

– http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconthecommontypesystem.asp

• Common Language Runtime (CLR)– http://msdn.microsoft.com/library/default.asp?url=/library/en-

us/cpguide/html/cpconthecommonlanguageruntime.asp• Inside .NET Framework

– http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconinsidenetframework.asp

• Raising an event– http://msdn.microsoft.com/library/default.asp?url=/library/en-

us/cpguide/html/cpconProvidingEventFunctionality.asp

Lähteet• C++ FAQ for C++ programmers

– http://www.andymcm.com/csharpfaq.htm• Boxing

– http://www.programmersheaven.com/articles/arun/boxing.htm• Anonymous methods

– http://www.theserverside.net/tt/articles/showarticle.tss?id=AnonymousMethods

• Events vs. Delegates– http://blog.monstuff.com/archives/000040.html

• Eventit ja delegaatit (MSDN)– http://msdn.microsoft.com/library/default.asp?url=/library/en-

us/cpguide/html/cpconeventsdelegates.asp

Lähteet• Delegates tutorial

– http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcwlkdelegatestutorial.asp

• Events tutorial– http://msdn.microsoft.com/library/default.asp?url=/library/en-

us/csref/html/vcwlkEventsTutorial.asp• Base Framework Classes

– http://msdn.microsoft.com/netframework/programming/bcl/default.aspx

• System.Windows.Forms– http://msdn.microsoft.com/library/default.asp?url=/library/en-

us/cpref/html/frlrfsystemwindowsforms.asp