Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "C# osztályok Krizsán Zoltán 1.0."— Előadás másolata:

1 C# osztályok Krizsán Zoltán 1.0

2 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. Krizsán Zoltán, iit C# osztályok

3 Definíció [attributes] [modifiers] class <className> [: baseClassName]  {     [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 Krizsán Zoltán, iit C# osztályok

4 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. Krizsán Zoltán, iit C# osztályok

5 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 Krizsán Zoltán, iit C# osztályok

6 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. Pointer osztály Események (Event) – delegátumok Krizsán Zoltán, iit C# osztályok

7 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ó Krizsán Zoltán, iit C# osztályok

8 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. Krizsán Zoltán, iit C# osztályok

9 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. Krizsán Zoltán, iit C# osztályok

10 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 Krizsán Zoltán, iit C# osztályok

11 Tagfüggvény Osztályban definiált függvény
C#-ban nem definiálhatunk globális függvényt! 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 Krizsán Zoltán, iit C# osztályok

12 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‘);      Krizsán Zoltán, iit C# osztályok

13 Tagfüggvény paraméter átadás módjai
void ertekSzerint(int a) beállított értéket kap void referenciaSzerint(ref int a) hívásnál is kell a ref kulcsszó, kötelező inicializálni void kimenetiRefSzerint(out int a) hívásnál is kell az out kulcsszó, kötelező a fv. törzsben beállítani Krizsán Zoltán, iit C# osztályok

14 Tagfüggvény Main fv. alakjai
public static void Main() {...} public static void Main(string[] args) {...} public static int Main() {...} public static int Main(string[] args) {...} Krizsán Zoltán, iit C# osztályok

15 Tagfüggvény Virtuális fv.
Alapból nem virtuális (nem úgy, mint JAVA) virtual kulcsszó segítségével. Ha egy fv. virtuális, akkor kötelező definiálni a törzsét Felülírása az override minősítővel a leszármazott osztályok valamelyikében Teljes azonosság Krizsán Zoltán, iit C# osztályok

16 Tagfüggvény Konstruktor
Neve: osztálynév Nem lehet meghívni explicite, de meghívódik amikor a rendszer létrehozza az objektumot. Default konstruktor itt is van. Ha nincs konstruktor itt is létrejön egy, és ez 0, false, null-ra állít Hívható másik konstruktor, akár az ősosztályé is, de a formája a következő: public Employee(int weeklySalary, int numberOfWeeks) : this(weeklySalary) { } Krizsán Zoltán, iit C# osztályok

17 Tagfüggvény Destruktor
Neve: ~osztálynév Csak 1 darab lehet. Ami finalize-re konvertálódik. Nem öröklődik, és nem lehet felüldefiniálni. Nem lehet meghívni explicite, de meghívódik amikor a gc felszabadítja, kisöpri az objektumot. Nem lehet sem paramétere, sem módosítója. Krizsán Zoltán, iit C# osztályok

18 Külső fv. Akkor mégis van???????????
Nem lehet definiálni, de lehet használni mások által definiált dll fv.-eket. [DllImport("kernel32", SetLastError=true)] static extern bool CreateDirectory(string name, SecurityAttribute sa); Krizsán Zoltán, iit C# osztályok

19 Operátorok Kétoperandusú Egyik legalább osztály típusú
Egyoperandusú Osztály típusú prefix postfix Krizsán Zoltán, iit C# osztályok

20 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). Krizsán Zoltán, iit C# osztályok

21 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! Krizsán Zoltán, iit C# osztályok

22 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)); } Krizsán Zoltán, iit C# osztályok

23 Példa – aritmetrikai operátor
public static bool operator<(RGBColor color1, RGBColor color2) {      return color1.colorValue < color2.colorValue; } public static bool operator>(RGBColor color1, RGBColor color2) return color1.colorValue > color2.colorValue; Krizsán Zoltán, iit C# osztályok

24 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;      Krizsán Zoltán, iit C# osztályok

25 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")); Krizsán Zoltán, iit C# osztályok

26 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); Krizsán Zoltán, iit C# osztályok

27 Konverziós operátorok
Alakja: public static kulcsszó operator mire(mit) Kulcsszó lehet: Implicit Automatikusan lefut. Sikeresnek kell lennie! Akkor ajánlott, ha nem jár inf. veszteséggel Explicit Nem fut le automatikusan. Hív(ód)ás: (típus) kifejezés -> kivételt dobhat! Kif as típus -> Nem dobhat kivételt (null)! Krizsán Zoltán, iit C# osztályok

28 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++){…} Krizsán Zoltán, iit C# osztályok

29 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; Krizsán Zoltán, iit C# osztályok

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 Események (Event) – delegátumok Krizsán Zoltán, iit C# osztályok

31 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. Krizsán Zoltán, iit C# osztályok

32 Szintaktika [attributes] [modifers] <type> <property-name>
{      [ set {  <accessor-body>  } ]      [ get {  <accessor-body > } ]  } Krizsán Zoltán, iit C# osztályok

33 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);      Krizsán Zoltán, iit C# osztályok

34 Tulajdonságok IL-ben Krizsán Zoltán, iit C# osztályok

35 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"); }          }}} Krizsán Zoltán, iit C# osztályok

36 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]); } Krizsán Zoltán, iit C# osztályok

37 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) Krizsán Zoltán, iit C# osztályok


Letölteni ppt "C# osztályok Krizsán Zoltán 1.0."

Hasonló előadás


Google Hirdetések