Programmering i C#

  • Published on
    15-Jan-2016

  • View
    106

  • Download
    1

Embed Size (px)

DESCRIPTION

Programmering i C#. 3. Klasser. 3.1 Inkapsling och datagmning. Inkapsling innebr paketering av funktioner och det data de ska hantera Klasser och structer Datagmning innebr att access till data kan kontrolleras med hjlp av synlighetsmodifierare - PowerPoint PPT Presentation

Transcript

  • 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

  • SpecialfallKombinationerna verlagras inte explicit+=, *=,
  • 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