C# osztályok. Krizsán Zoltán



Hasonló dokumentumok
C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven

Bánsághi Anna

Bánsághi Anna

Programozás II. labor

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Események C#-ban Krizsán Zoltán iit

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Objektumorientált programozás C# nyelven III.

Objektumorientált programozás C# nyelven

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Objektumorientált programozás C# nyelven


117. AA Megoldó Alfréd AA 117.

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Eseményvezérelt alkalmazások fejlesztése II. A.NET keretrendszer és a C# programozási nyelv. Objektumorientált programozási nyelvek A Smalltalk nyelv

JAVA PROGRAMOZÁS 3.ELŐADÁS

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

3. Gyakorlat Ismerkedés a Java nyelvvel

Objektumorientált programozás C# nyelven

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Magas szintű programozási nyelvek 2 Előadás jegyzet

Osztály és objektum fogalma

INFORMATIKAI ALAPISMERETEK

Java és web programozás

OOP: Java 8.Gy: Abstract osztályok, interfészek

Delegátumok C#-ban Krizsán Zoltán iit

Programozási Paradigmák és Technikák

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Programozási nyelvek Java

OOP #14 (referencia-elv)

BME MOGI Gépészeti informatika 8.

INFORMATIKAI ALAPISMERETEK

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

C#, OOP. Osztályok tervezése C#-ban

Bevezetés a programozásba 2

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Információs Technológia

Access adatbázis elérése OLE DB-n keresztül

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

Programozási nyelvek Java

Programozás C++ -ban 2007/4

Generikus Típusok, Kollekciók

Bevezetés a C++ programozási nyelvbe

C# gyorstalpaló. Készítette: Major Péter

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Programozás I. Első ZH segédlet

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

TestLine - OO Programozás alapjai Minta feladatsor

OOP és UML Áttekintés

Objektumorientált programozás C# nyelven II.

Objektumorientált programozás IX. Osztályok, objektumok

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

és az instanceof operátor

Java programozási nyelv

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 5.Gy: Osztály, referencia, konstruktor

A Jáva programozási nyelv rejtelmei

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozási nyelvek Java

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

C# feladatok gyűjteménye

Osztályok. 4. gyakorlat

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Programozási nyelvek II.: JAVA

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Web-technológia PHP-vel

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

osztályok kapcsolata Származtatatás C++ Izsó Tamás március 19. Izsó Tamás Származtatatás/ 1

BME MOGI Gépészeti informatika 4.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozási nyelvek II.: JAVA, 4. gyakorlat

Java és web programozás

OOP: Java 8.Gy: Gyakorlás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Programozási technológia

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Java IX. telkezelés a Java-ban

Bevezetés a C++ programozásba

Felhasználó által definiált adattípus

Átírás:

C# osztályok Krizsán Zoltán

Fogalma Önálló hatáskőrrel rendelkező, absztrakt adattípus, amely több, különböző elemet tartalmazhat. Minden esetben a heap-en jön létre! A programozó hozza létre, de a GC menedzseli. 2

Definíció [attributes] [modifiers] class <classname> [: b aseclassname] { [class-body] [;] Módosítók lehetnek: new, public, protected, internal, private, abstract, sealed Hasonló, mint C++-ban, vagy JAVA-ban, nem kötelező a ; a végén Nincs jelölve, de minden osztály a System.Object származottja 3

Mezők tárolási módjai Statikus: Egy példány minden objektum számára, osztályhoz kötődik, nem az objektumhoz! Példány: Minden objektumnak külön példánya van a tagból. 4

Mezők hozzáférési módosítói A tagok elérési szabályozza, minden mező elé ki kell tenni! private (alapértelmezett): csak az adott osztályból érhető el. protected: az adott osztályból, és a leszármazottakból érhető el. internal: csak a szerelvény fv.-ei érhetik el protected internal: az előző kettő összege public: nincs semmilyen korlátozás, minden szerelvényből 5

Osztály részei Adattagok (Field) - adatok Konstansok (Constant) állandó adatok Csak olvasható mezők (read only) Tagfüggvények (Method) fv.-ek Operátorok (Operator) speciális tfv.-ek Indexelők (Indexer) speciális tfv.-ek Tulajdonságok (Property) kivülről adat, belülről fv. Delegátumok típusos fv. pointerek Események (Event) delegátumok 6

Adattagok Osztály hatáskőrben definiált változó. Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][, azonosító [=kezdő érték]]; Módosítók lehetnek: const konstans readonly csak olvasható mező static statikus volatile gyakran változó 7

Konstans Értéke fordítási időben állítódik be, futási időben értéke nem változtatható. Csak konstans értékét veheti fel. Alapértelmezett tárolási osztálya static. Nem kell példányosítani az osztályt ahhoz, hogy használjuk MSIL kódban lcd utasítás (load constant) tölti fel a stack-re. 8

Csak olvasható mezők Futási időben állítható az értéke, de csak egyszer! Értékét 3 helyen állíthatjuk: konstruktor, statikus konstruktor, vagy a definíció során. Értékét akár fv. hívás visszatérési értéke is szolgáltathatja! Az osztály különböző példányaiban a mező különböző étéket vehet fel. 9

Osztály részei Adattagok (Field) - adatok Konstansok (Constant) állandó adatok Csak olvasható mezők (read only) Tagfüggvények (Method) fv.-ek Operátorok (Operator) speciális tfv.-ek Indexelők (Indexer) speciális tfv.-ek Tulajdonságok (Property) kivülről adat, belülről fv. Delegátumok típusos fv. pointerek Események (Event) delegátumok 10

Tagfüggvény Osztályban definiált függvény C#-ban nincs globális függvény! Formája: [attribútum] [módosítók] visszatérési_érték fvnév([paraméterszignatúra]) Egy módosító csak egyszer szerepelhet. Kölcsönösen kizárják egymást: static, virtual, override Kölcsönösen kizárják egymást: new, override 11

Tagfüggvény változó hosszúságú paraméterlista class OpenEnded{ public void Foo( params object[] pp ){ for (int i = 0 ; i < pp.getlength(0) ; i++){ Console.WriteLine(pp[i]); class TestVarArgs{ static void Main(string[] args){ OpenEnded oe = new OpenEnded(); oe.foo( 123, 456, "Hello", new Point(7,8), 9.0m, true, 'X ); 12

Operátorok Kétoperandusú Egyik legalább osztály típusú Egyoperandusú Osztály típusú prefix postfix 13

Szintaktikai szabályok Statikus fv.-nek kell lennie (static)! Publikusnak kell lennie (public)! Neve kötelezően operator utána egy jel Egyoperandusú op.-nál a fv. paramétere kötelezően az adott osztály típusú kell legyen! Kétoperandusú op.-nál a fv. egyik paramétere kötelezően az adott osztály típusú kell legyen! Nem definiálható felül a [] operátor (de ott vannak az indexerek). 14

Szintaktikai szabályok () operatort nem lehet &&,,?: logikai operatorokat nem lehet == sem lehet, de az Equals fv.-t viszont felül lehet írni! new, =,. Sem lehet <, > operátorokat csak párban lehet újradefiniálni! Nem létezőoperátorokat nem lehet újradefiniálni! 15

Példa egyoperandusú operátor struct RGBColor{ public static readonly RGBColor EMPTY = new RGBColor(0x00); public static readonly RGBColor FULL = new RGBColor(0xFF); int colorvalue; public int ColorValue{ get { return colorvalue; public RGBColor(int color){ colorvalue = color; public static RGBColor operator++(rgbcolor color) { if (color.colorvalue!= FULL) color.colorvalue++; return color; public static RGBColor operator- -(RGBColor color) { if (color.colorvalue!= EMPTY) color.colorvalue--; return color; public string ToString(string format){ return (colorvalue.tostring(format)); 16

Példa aritmetrikai operátor public static bool operator<(rgbcolor color1, RGBColo r color2) { return color1.colorvalue < color2.colorvalue; public static bool operator>(rgbcolor color1, RGBColo r color2) { return color1.colorvalue > color2.colorvalue; 17

Példa kétoperandusú operátor public static RGBColor operator+(rgbcolor color, int inc) { if (0xFF >= (color.colorvalue + inc)) color.colorvalue += inc; else color.colorvalue = 0xFF; return color; public static RGBColor operator-(rgbcolor color, int dec) { if (0 < (color.colorvalue - dec)) color.colorvalue -= dec; else color.colorvalue = 0x00; return color; 18

Példa struct RGB{ public RGB(RGBColor red, RGBColor green, RGBColor blue){ Red = red; Green = green; Blue = blue; public RGBColor Red; public RGBColor Green; public RGBColor Blue; public override string ToString(){ return (Red.ToString("X2") + Green.ToString("X2") + Blue.ToString("X2")); 19

Példa teszt osztály class GradientFill{ static void PrintRGBValue(RGB rgb) { Console.WriteLine("{0 ", rgb); public static void Main(){ Console.WriteLine("Getting RGB values for gradient " + "fill (dark red -> red)\n"); for (RGB rgb = RGB.DARKRED; rgb.red.colorvalue < 0xFF; rgb.red++ ){ PrintRGBValue(rgb); 20

Konverziós operátorok Alakja: public static kulcsszó operator mire(mit) Kulcsszó lehet: Implicit Autómatikusan lefut. Sikeresnek kell lennie! Akkor ajánlott, ha nem jár inf. veszteséggel Explicit Nem fut le autómatikusan. Hív(ód)ás: (típus) kifejezés -> kivételt dobhat! Kif as típus -> Nem dobhat kivételt (null)! 21

Példa II public static implicit operator int (RGBColor col) { return col.colorvalue; Tesztben csere: for (RGB rgb = RGB.DARKRED; rgb.red.colorvalue < RGBColor.FULL; rgb.red++){ 22

Példa - konverziós operátor struct Celsius{ public Celsius(float temp){ this.temp = temp; public static implicit operator Celsius(float temp){ Celsius c; c = new Celsius(temp); return(c); public static implicit operator float(celsius c){ return((((c.temp - 32) / 9) * 5)); // Fahrenheit-be vissza public float temp; 23

Osztály részei Adattagok (Field) - adatok Konstansok (Constant) állandó adatok Csak olvasható mezők (read only) Tagfüggvények (Method) fv.-ek Operátorok (Operator) speciális tfv.-ek Indexelők (Indexer) speciális tfv.-ek Tulajdonságok (Property) kivülről adat, belülről fv. Delegátumok típusos fv. pointerek Események (Event) delegátumok 24

Tulajdonságok Kívülről adattag belülről tfv. Lehet csak írható, lehet csak olvasható Nem lehet fv. paramétere! Absztrakt osztály segítségével kikényszeríthető a léte! Lehet virtuális. 25

Szintaktika [attributes] [modifers] <type> <property-name> { [set{ <accessor-body> ] [ get { <accessor-body > ] 26

Példa class Address{ protected string city; public string City{ get{ return city; //csak olvasható protected string zipcode; public string ZipCode{ get { return zipcode; set { zipcode = value; city = "Atlanta"; class PropertyApp{ public static void Main(){ Address addr = new Address(); addr.zipcode = "30338"; string zip = addr.zipcode; Console.WriteLine("The city for ZIP code {0 is {1", addr.zipcode, addr.city); 27

Tulajdonságok IL-ben 28

Példa - indexer using System.Collections; class MyListBox{ protected ArrayList data = new ArrayList(); public object this[int idx] { get{ if (idx > -1 && idx < data.count){ return (data[idx]); else{ throw new InvalidOperationException("[MyListBox.set_Item] + "Index out of range"); set{ if (idx > -1 && idx < data.count){ data[idx] = value; else if (idx == data.count){ data.add(value); else{ throw new InvalidOperationException( "[MyListBox.get_Item] Index out of range"); 29

Példa indexer teszt class IndexersApp{ public static void Main(){ MyListBox lbx = new MyListBox(); lbx[0] = "foo"; lbx[1] = "bar"; lbx[2] = "baz"; Console.WriteLine("{0 {1 {2", lbx[0], lbx[1], lbx[2]); 30

Osztály részei Adattagok (Field) - adatok Konstansok (Constant) - állandó adatok Csak olvasható mezők (read only) Tagfüggvények (Method) - fv.-ek Operátorok (Operator) - speciális tfv.-ek Indexelők (Indexer) - speciális tfv.-ek Tulajdonságok (Property) - kivülről adat, belülről fv. Delegátumok - típusos fv.pointerek (külön diasorozat) Események (Event) - delegátumok (külön diasorozat) 31