View
125
Download
4
Embed Size (px)
DESCRIPTION
Programmering i C#. 3. Klasser. 3.1 Inkapsling och datagömning. Inkapsling innebär paketering av funktioner och det data de ska hantera Klasser och structer Datagömning innebär att access till data kan kontrolleras med hjälp av synlighetsmodifierare - PowerPoint PPT Presentation
Programmering i C#3. Klasser
Programmering i C# - Kapitel 3
3.1 Inkapsling och datagmningInkapsling innebr paketering av funktioner och det data de ska hanteraKlasser och structerDatagmning innebr att access till data kan kontrolleras med hjlp av synlighetsmodifierareFem niver: public, private, protected, internal, internal protected
Programmering i C# - Kapitel 3
3.2 Flt (fields)Medlemmar kan vara funktioner, variabler eller typertskilliga varianter i C#:Flt r medlemsvariablerKlassreferenser, interfacereferenser, structerGrs aldrig public i klasser, men ofta i structerInitieras automatiskt till noll (eller motsv.)
Programmering i C# - Kapitel 3
Initiering av fltclass Trivial // klassdeklarationen{ int val = 100; // default synlighet: private string str = Etthundra; double[] vec = new double[100]; MyClass obj1 = new MyClass(); YourClass obj2 = null; // endast fr tydlighet // blir nd null public int GetVal() { return val; }}
Programmering i C# - Kapitel 3
Skrivskyddade fltTv stt skrivskydda flt:Initiera med literal constEndast typer som kan skrivas literaltTilldela en gng readonlyI klassdeklaration eller konstruktorAlla typer, ven referenser
Programmering i C# - Kapitel 3
Skrivskyddade flt, exempelclass Trivial{ const int val = 100; const string str = Stndigt innehll; readonly SomeClass obj = new SomeClass(); public int GetVal() { return val; // alltid 100 }}
Programmering i C# - Kapitel 3
Statiska fltInstansmedlemmar ingr i objektStatiska medlemmar finns i ett enda gemensamt exemplarRefereras endast med klassnamnKonstant medlem blir ocks statisk!Trivial obj = new Trivial();... obj.val; // Fel, val r const och drmed static... Trivial.val; // Rtt!
Programmering i C# - Kapitel 3
3.3 KonstruktorerKonstruktor r en metod med samma namn som klassenSkapar objekt av klassenKan verlagras med olika parameterlistorIngen deklarerad returtypKlass utan konstruktor fr en parameterls defaultkonstruktor automatiskt genereradTrivial obj = new Trivial(); // defaultkonstruktorn
Programmering i C# - Kapitel 3
Egna konstruktorerclass Rational { int numerator, denominator; public Rational(): this(0, 1) {} public Rational(int n): this(n, 1) {} public Rational(double val): this((int)(val * 1000), 1000) {} public Rational(int n, int d) { if (d == 0) d = 1; numerator = n; denominator = d; }}
Programmering i C# - Kapitel 3
3.4 Metoder (methods)Definieras alltid med returtyp, namn och parameterlista, samt kroppParameterlistan kan vara tomFlera metoder med samma namn men olika parameterlista tillts (verlagring)Structparameter ger vrdeanropReferensparameter ger referensanropKlassobjekt alltid referens
Programmering i C# - Kapitel 3
Parameterverfringstatic void F(int x, int[] vec){ x = 100; vec[0] = 100;}static void Main(){ int i = 0; int[] iv = new int[3]; // alla r 0 F(i, iv); Console.WriteLine({0}, {1}, i, iv[0]); // 0, 100}
Programmering i C# - Kapitel 3
Referensanrop med structReferensanrop med struct fs med modifierarna ref eller outAnges bde i definition och i anropLiten skillnad: out kan vara oinitieradstatic void F(ref int x, int[] vec) { // gr ngot med x }static void Main(){ F(ref i, iv); } // i kan ndras av anropet
Programmering i C# - Kapitel 3
Statiska metoderven metoder kan vara staticAnropas via klassnamnKan endast se andra statiska medlemmarven const r statiska!Instansmetoder har osynlig parameter this Refererens till det aktuella objektetStatiska metoder har ingen this
Programmering i C# - Kapitel 3
3.5 Egenskaper (properties)Ser ut som flt men r metoderKan dlja ett flt som annars kunde vara publicGr aldrig flt public!Kan ha valfri logik, som en metodKan ha set och/eller getBara get ger skrivskydd
Programmering i C# - Kapitel 3
Egenskaper exempelpublic string MyProp{ get { return myField; } set { myField = value; }}obj.MyProp = Ny strng;
Programmering i C# - Kapitel 3
Statisk egenskap som konstruktorVanlig design i mnga klasser:Statiska egenskaper som returnerar typiska objektAnropar ngon konstruktorpublic static Color Red{ get { return new Color(255, 0, 0); }}Color obj = Color.Red;
Programmering i C# - Kapitel 3
3.6 OperatorerAlla operatorer r metoder i respektive klass eller structValfritt frse egna typer med operatorerOperatorer r statiska metoder dr minst en parameter (operand) r av aktuell typEn operand: en parameterTv operander: tv parametrar
Programmering i C# - Kapitel 3
Operatorer forts.Endast operatorer frn standarduppsttningNya kan inte uppfinnasPrioritet och associativitet enligt reglernaUnr/binr ssom operatornTilldelningsoperatorn kan inte verlagraspublic static X operator+(X left, X right){ }
Programmering i C# - Kapitel 3
Operator ++ och --Ensam om egenheten att vara prefix eller postfixKan inte verlagras specifikt fr ++x/x++Mste returnera objekt av aktuell typFr ej ndra aktuellt objekts tillstnd
Programmering i C# - Kapitel 3
IndexoperatornVanligt behov r att kunna verlagra specifikt fr lvalue/rvalueProblematiskt i exempelvis C++C# har valt annan syntax (indexerare)public X this[int i]{ get { }set { }}
Programmering i C# - Kapitel 3
3.7 TypomvandlareImplicit och explicit typomvandling r ocks egentligen metoder i klasser/structerUndantaget upcast/downcastEgna typer kan gras kompatibla med andra genom typomvandlareSyntax som liknar operatorer
Programmering i C# - Kapitel 3
Typomvandlare exempelTypomvandlaren mste markeras implicit eller explicitclass Rational{ private int numerator, denominator; ... public static implicit operator double(Rational obj) { return (double)obj.numerator/obj.denominator; }}
Programmering i C# - Kapitel 3
Typomvandlare forts.Omvandling till egen typ ocks relevantExempelvis double till RationalBlir parallell till konstruktorAnropar typiskt motsvarande enparameterskonstruktor
Programmering i C# - Kapitel 3
3.8 DestruktorSkrpsamlaren raderar objekt vid odefinierad tidpunktObjekt frn klasser med destruktor hanteras i srskild kF klasser har behov av destruktor i de fallen mste den kunna anropas explicitMen explicit konstruktoranrop finns inte!
Programmering i C# - Kapitel 3
Dispose-mnstretResursallokerande klasser ska ha destruktor och implementera IDisposable.DisposeAnrop till Dispose br eliminera skrpsamlarens anrop till destruktorEfter anrop till Dispose br objektet vara oanvndbartDispose ska klara upprepade anropDestruktor och Dispose ska inte dubblera varann
Programmering i C# - Kapitel 3
Dispose-mnstret forts.class X : IDisposable { private bool disposed = false;~X() { Dispose(false); }public void Dispose() { Dispose(true); }private void Dispose(bool disposing) { if (Disposed) return;// API-anrop som slpper resurserif (disposing) {disposed = true;GC.SuppressFinalize(this); }}}
Programmering i C# - Kapitel 3