Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

C# for javaprogrammerere

Liknende presentasjoner


Presentasjon om: "C# for javaprogrammerere"— Utskrift av presentasjonen:

1 C# for javaprogrammerere
Åsmund Eldhuset asmunde stud.ntnu.no folk.ntnu.no/asmunde/algdat/ @

2 C# 

3 GUI-lyttere Klassen MyWindow skal lytte på okButton og cancelButton OK

4 Utskrift til skjerm Console.WriteLine() tilsvarer System.out.println()
System.Diagnostics.Trace.WriteLine() har mer avanserte muligheter Kan bruke {} til å skrive ut argumenter: int a = 4; Console.WriteLine("Kvadratet av {0} er {1}", a, a*a);

5 Nullable types C# har ikke Integer, Long, Float, Double eller noen av de andre wrapper-klassene OK i forbindelse med containers, siden de støtter de primitive typene Men hva hvis man vil ha en tallvariabel som kan være null? Svar: nullable types Lages ved å sette ? etter en primitv type int? a = null;

6 XML-kommentarer

7 Attributes

8 Arv Java: public class A extends B implements C
C#: public class A : B, C

9 Partial classes Tillater at du deler opp en klassedefinisjon over flere filer, ved å føye partial til klassedeklarasjonen Alle "overskriftene" i partial-delene må være like (f.eks. må de extende samme klasse osv.) public partial class MyPartialClass

10 Constructors Java: public MyClass(int a, int b) { super(a); this.b = b; } C#: public MyClass(int a, int b) : base(a) { this.b = b; }

11 Overriding av metoder Hvis en metode skal kunne overrides, må baseklassen markere den med virtual: public class A { public virtual void someMethod() {...} } Subklassen må markere den med override: public class B : A { public override void someMethod() {...} } Du kan lage en ny metode som skjuler den gamle med new: public class C : A { public new void someMethod() {...} }

12 Sammenligning Som i Java: ==
brukt på primitive datatyper (int, float, ...): sammenligner verdien brukt på objektreferanser: sammenligner referansene for å se om det er samme objekt Unntak i C#: brukt på String/string vil == sammenligne verdiene String a = new String("hei"); String b = new String("hei"); Java: a == b er false C#: a == b er true

13 Foreach Java: ArrayList numbers = new ArrayList(); numbers.add(8); numbers.add(42); for (Object a : numbers) System.out.println((Integer)a); C# kan gjøre casten for deg automatisk: ArrayList numbers = new ArrayList(); numbers.Add(8); numbers.Add(42); foreach (int a in numbers) Console.WriteLine(a);

14 GUI-lyttere i Java public class MyWindow implements ActionListener { private JButton okButton; private JButton cancelButton; ... public MyWindow() { okButton.addActionListener(this); cancelButton.addActionListener(this); } public void actionPerformed(???) { if (src == okButton) { ... } else if (src == cancelButton) { ... } } }

15 GUI-lyttere i Java: Problemer
MyWindow må implementere ActionListener og må dermed ha metoden actionPerformed Vi skal lytte på flere objekter, men alle disse vil utløse samme metode (actionPerformed) Dermed må vi ha en (potensielt stor) if-blokk for å sjekke hvilket objekt som utløste handlingen Grunnleggende problem: Lyttere i java må implementeres vha. interfaces – andre klasser kan kun jobbe mot referanser til objekter som implementerer et visst interface – man får ikke muligheten til å spesifisere metoden selv Hvis man har behov for flere lyttere, må den observerte klassen ha et Set med lyttere – mer strevsomt å kode

16 Interface-referanser i Java og C#
Objekt B (observatør) Implementerer Observable-grensesnitt Objekt A (observert) observer observedChanged()

17 Delegater i C# ICanCallThisMethodWhateverIWant() observer

18 Delegates og events En delegate er en referanse til en bestemt metode i et bestemt objekt En deklarasjon av en delegate må fortelle parametre og returtype til metoden: public delegate void ObserverDelegate(int); Ut fra en delegate kan man lage events: public event ObserverDelegate observers; Enhver metode som har int som parameter og returnerer void kan legges til denne eventen

19 Delegates og events Delegater kan legges til eller fjernes fra en event med += og -= Observer observer = new Observer(); observers += new ObserverDelegate(observer.observation); Alle delegatene som er lagt til en event vil utløses når du kaller eventen: observers(42);

20 Collections

21 Generics

22 Namespaces C# sitt svar på pakker
Java: package MyPackage; C#: namespace MyNamespace { ... } Du kan ha flere namespaces inni samme fil Namespaces kan nøstes: namespace Outer { namespace Inner { ... }} tilsvarer namespace Outer.Inner { ... }

23 Kodestandarder Metoder, medlemsvariabler og properties som er public bør ha stor forbokstav Venstre krøllparentes skal stå på en egen linje

24 Operator overloading Du kan definere hvordan operatorer skal oppføre seg ovenfor klassene dine

25 Properties Alternativ til gettere og settere, med mer behagelig syntaks Java: private int number; public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } System.out.println(obj.getNumber()); obj.setNumber(42);

26 Properties C#: private int number; public Number { get { return number; } set { number = value; } } Console.WriteLine(obj.Number); obj.Number = 42; Kan dermed lett lage illusjonen av read-only-variabler

27 Output-parametre Hvis du vil returnere flere verdier fra en funksjon, kan dette gjøres indirekte gjennom et parameter som markeres med out Metoden får da tilgang til å modifisere variabelen slik at endringen er synlig for omverdenen float divide(int n, int d, out int quotient, out int remainder) { quotient = n / d; remainder = n % d; return n / (float)d; }

28 Structs


Laste ned ppt "C# for javaprogrammerere"

Liknende presentasjoner


Annonser fra Google