C# ja.net Juha Järvensivu juha.jarvensivu@tut.fi 2007
Sisältö C#.NET-kirjastot
C# - C-sharp Standardoitu kieli (2003) Kieli, jossa pyritään yhdistämään C++:n tehokkuus ja Javan helppokäyttöisyys Suunniteltu.NET-ohjelmointiin Standard ECMA-334 C# 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ä
Boxing Myös value-tyyppejä voidaan käsitellä kuten reference-tyyppejä // Make a simple value data point short s = 25; // Box the value into an object reference object objshort = s;
Boxing ArrayList mylist = new ArrayList(); // Automatic boxing int mylist.add(23); // OK unbox first item int item = (int)mylist[0]; // ERROR System.InvalidCastException: // Unable to cast object of type 'System.Int32 // to type 'System.String'. string item = (string)mylist[0];
Property
Viime viikon esimerkistä: void textbox1_textchanged(object sender, EventArgs e) button1.enabled = (textbox1.text!= " " ) && (textbox2.text!= " ");
Property (Ominaisuus) class MyClass int myvalue = 0; MyClass myclass = new MyClass(); int value = myclass.value; public int Value set myvalue = value; get return myvalue; myclass.value = 2;
Testi for(int i = 0; i < Int32.MaxValue; i++) // päivitä muuttujan arvo Debug: Muuttuja : 19.832s Set-funktio : 35.995s Property : 36.182s Release: Muuttuja : 5.548s Property : 5.564s Set-funktio : 5.532s
Delegaatti
Viime viikon esimerkistä: this.textbox1.keypress += new KeyPressEventHandler(onlyNumber); void onlynumber(object sender, KeyPressEventArgs e) if (!char.isdigit(e.keychar)) e.handled = true;
Delegaatti-mekanismi referenssityyppi, joka voi osoittaa useaan metodiin samanaikaisesti Metodiosoitin Delegaatti D Metodit A B C
Delegaatin esittely public class MyClass // Delegaatin esittely public delegate void MyDelegate(); // Delegaatin luonti MyDelegate delegatemember;
Kuuntelijan rekisteröinti delegaattiin 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.mydelegate( );
Event
eventin esittely public class MyClass // Delegaatin esittely public delegate void MyEvent(object sender, EventData eventdata); // eventin luonti event MyEvent EventMember;
event Määre, joka muuttaa delegaatin käyttäytymistä 1. voidaan sisällyttää rajapintaluokkiin (reference tyyppi) 2. voidaan kutsua vain luokasta, jonka jäsenmuuttujana muuttuja on. 3. luokan ulkopuolelta vain metodien lisäys ja poisto += ja -= operaatioilla
Kuuntelijan rekisteröinti eventtiin MyClass c1; c1.eventmember += new MyEvent(myHandler); void myhandler(object sender, EventData eventdata) // TODO: add implementation here
Eventin kutsuminen MyClass::FunctionX() onmyevent(new EventData); protected void MyClass:: OnMyEvent(EventArgs e) if (EventMember!= null) EventMember(this, e);
Perintä class abstract MyBaseClass virtual void Func1() abstract void Func2(); // Voidaan ylimääritellä // Täytyy ylimääritellä class MyClass : MyBaseClass override void FuncX() // Ylimääritellään sealed override void FuncX() // Ei voi ylimääritellä uudelleen
partial class Luokan koodi voidaan jakaa fyysisesti useampaan eri tiedostoon Käytetään muun UI-designerin generoiman koodin kapseloimiseksi omaan tiedostoon
Olion tyypin selvittäminen Avainsanan is avulla // determined if an object is compatible with // the string type if(obj is string)
.NET luokkakirjastot ISBN 0735615551
.NET kirjasto Ei sidottu tiettyyn ohjelmointikieleen // C# public void CreateMyForm() // Create a new instance of the form. Form form1 = new Form(); // Create two buttons Button button1 = new Button (); Button button2 = new Button (); // Set the text of button1 to "OK". button1.text = "OK"; // Visual Basic Public Sub CreateMyForm() ' Create a new instance of the form. Dim form1 As New Form() ' Create two buttons Dim button1 As New Button() Dim button2 As New Button() ' Set the text of button1 to "OK". button1.text = "OK"
.NET kirjasto XML Web Services Web Forms Windows Forms ASP.NET Data and XML Classes (ADO.NET) Base Class Libraries (BCL) Common Language Runtime (CLR)
Base Class Libraries (BCL) Peruskirjasto, joka käytettävissä kaikissa.netohjelmointikielissä C# int bool.net System.Int32 System.Boolean string System.String
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 ToolTip UserControl Button Panel OpenFileDialog SaveFileDialog Forn
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
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=anony mousmethods Events vs. Delegates http://blog.monstuff.com/archives/000040.html Eventit ja delegaatit (MSDN) http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconeventsdelegates.asp
Lähteet Delegates tutorial http://msdn.microsoft.com/library/default.asp?url=/library/enus/csref/html/vcwlkdelegatestutorial.asp Events tutorial http://msdn.microsoft.com/library/default.asp?url=/library/enus/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/enus/cpref/html/frlrfsystemwindowsforms.asp