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

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Osztály leszármaztatás
Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
C++ programozási nyelv Gyakorlat hét
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 5. rész – Osztályok III.
C# Alapok Krizsán Zoltán.
C# tagfüggvények.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
C# osztályok Krizsán Zoltán 1.0.
C# tagfüggvények.
Krizsán Zoltán iit 1.2.  Nem kell vizuális felületnek lennie.  Delegátumok segítségével valósíthatja meg a.NET. Krizsán Zoltán iit Delegátumok C#-ban2.
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
szakmérnök hallgatók számára
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Metódusok
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Objektum orientált programozás
A Visual Basic nyelvi elemei
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Típuskonverzió a C++ nyelvben
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Konverziós operátorok
Feladat Készítsünk programot, amely ciklikusan egy egyenest forgat 8 fokonként, mialatt 3 db vektort mozgat és forgat 5, 6 ill 7 fokonként, és kijelzi.
Függvénysablonok használata
Előadás másolata:

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

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

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

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

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

Default hozzáférési módosító Típusnak internal. Beágyazott típusnak private. Adattagnak private. // An internal class with a private default constructor. class Radio { Radio(){} } Krizsán Zoltán, iit C# osztályok

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

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

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

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

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

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

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

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 Jelölni kell a hívás helyén is (out, ref)! Krizsán Zoltán, iit C# osztályok

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

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 szükséges. Krizsán Zoltán, iit C# osztályok

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

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

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

Operátor overloading Operátor overloading fogalma A C# nyelv lehetőséget nyújt arra, hogy a programozó által definiált típusokra az operátorok átértelmezhetők legyenek. A polimorfizmus implementációja! Egy operátorjel operandusainak típusa határozza meg az operátorjel jelentését. A jelentést függvény definícióval (tagfüggvénnyel) írhatjuk le. Krizsán Zoltán, iit C# osztályok

Operátorok felüldefiniálása Kétoperandusú Egyik legalább osztály típusú Egyoperandusú Osztály típusú prefix postfix Érdekesség: CIL kódban fv. generálódik -- op_Decrement() ++ op_Increment() + op_Addition() Krizsán Zoltán, iit C# osztályok

Szintaktikai szabályok A precedencia és asszociativitási szabályok nem változhatnak. 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

Szintaktikai szabályok () operatort nem lehet (arra ott van a konveziós) [] operátort sem, arra meg ott van az indexer &&, || , ?: logikai operatorokat nem lehet ==, !=, <=, >= csak párban érdemes, és ott az Equals fv. és a IComparable interfész is! new, =, . Nem 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

Egyoperandusú (unáris) operátor Egyoperandusú (unáris) operátor: Az x@ (post) és @x (pre) (@ tetszőleges operátorjel) ugyanaz, és a fordítóprogram az alábbi függvényhívással helyettesíti: public class Osztaly{ public static ertek operator @(Osztaly p1) } Egy paramétere lehet, ami osztály típusú. Nincs lehetőség a pre és post operátorokat külön felüldefiniálni, cserébe a rendszer jól kezeli. pl: ++, -- Krizsán Zoltán, iit C# osztályok

Kétoperandusú (bináris) operátor Kétoperandusú (bináris) operátor: Az x @ y kifejezést a fordítóprogram az alábbi függvényhívással helyettesíti: public class Osztaly{ public static ertek operator @(X p1, Y p2) } Ahol vagy X vagy Y Osztály típusú kell legyen! +=, -= operátorokat nem kell, ha a + és – már felül van, automatikusan generálódik Krizsán Zoltán, iit C# osztályok

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

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

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

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

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

Konverziós operátorok int a = 123; long b = a; // implicit int c = (int) b; //explicit vagy Os ref; // Szarmazott : Os ref = new Szarmazott(); Szarmazott ref = (Szarmazott) OsPeldany; Krizsán Zoltán, iit C# osztályok

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

Konverziós operátorok szintaktika public static explicit | implicit operator mire (mit) a mire vagy a mit osztály kell legyen! pl.: osztály egy példányát int-re automatikusan public static implicit operator int (Osztály peldany) pl.: int-ről osztály egy példányára cast public static explicit operator Osztaly (int mirol) Krizsán Zoltán, iit C# osztályok

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

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

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

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

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

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

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

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

Indexer A [] operátor jelentésének átdefiniálása. Osztályunk példányait tömbként használhatjuk. A property és az operátor felüldefiniálás keveréke. A paraméter lehet int vagy string. public Alapelem this[int index] { get { return (Alapelem)arElemek[index]; } set { arElemek.Insert(index, value); } } Krizsán Zoltán, iit C# osztályok

Indexer II Lehet több dimenziós is. pl.: public int this[int sor, int oszlop] Iterfészekben előírható: public interface IStringContainer { string this[int index] { get; set; } } Krizsán Zoltán, iit C# osztályok

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

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

Polimorfizmus C#-ban Krizsán Zoltán

Származás Egyszeres = egy osztálynak csak egy őse Osztaly : OsOsztaly jelölése Base kulcsszóval hívható az ős konstruktora Osztaly([parameterlista]) :base([osparamlista]) { // nem itt van az ős konstruktor hívás }

Tagfüggvények Alapból nem virtuális!!! Ha azzá akarjuk tenni, akkor kell a virtual kulcsszó. OsOsztaly obj = new Osztaly(); obj.fv(); // ősét hívja!

Virtuális fv. Ahol bevezetjük kell a virtual kulcsszó! Ekkor a leszármazottak felül definiálhatják. public override string ToString(){} public override bool Equals(object obj){} Ahol felül definiáljuk (leszármazottak) kell az override kulcsszó! ( visual studio segít ) Ha szeretnénk megtiltani a lejjebb levőknek a felül definiálást: override sealed

Kitakarás / eltakarás Ha olyan elemet definiálunk, ami már volt és az virtuális, akkor fordítási hiba. Ilyenkor vagy override = felüldefiniál new = kitakar Kitakart elem lehet: fv, adattag, tulajdonság, konstans, …

as, is operátor Hibás cast kivételt okoz! pl.: mire obj = (mire) Mit; Helyette: as operátor mire obj = Mit as mire; if (obj != null) {} is operátor if (Mit is mire) obj = (mire) Mit;