c# ja - cs.tut.figrako/2008/luennot/net_c_2008.pdfc# - ”c-sharp” • kieli, jossa pyritään...
TRANSCRIPT
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
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
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( );}
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ä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 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
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ä
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
• 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öä…
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
CLS
• Common Language Specification• ”Yleinen kielimääritys”• Joukko tyyppejä, jotka kaikkien
ohjelmointikielten pitää vähintään toteuttaa• CLS compliant code
– [assembly: System.CLSCompoliant(true)]
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