Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

72
Uvod v C# Drugi del

Transcript of Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Page 1: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Uvod v C#Drugi del

Page 2: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Dedovanje

Page 3: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Sintaksa

Page 4: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Prirejanje in preverjanje tipov

Page 5: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Kaste preverjenih tipov

Page 6: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Prekrivanje metod

Page 7: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Dinamično povezovanje (poenostavljeno)

Page 8: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Skrivanje

Page 9: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Dinamično povezovanje (s skrivanjem)

Page 10: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Fragile base class problem

Page 11: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Konstruktorji in dedovanje

Page 12: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Vidnost protected in internal

Page 13: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Abstraktni razredi

Page 14: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Abstraktne lastnosti in indekserji

Page 15: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Zapečateni razredi

Page 16: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Vmesniki (interfaces)

Page 17: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Sintaksa

Page 18: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Implementacija vmesnikov

Page 19: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Delo z vmesniki

Page 20: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Primer

Page 21: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Delegati in dogodki

Page 22: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Delegati

Delegates are reference types which allow indirect calls to methods.

A delegate instance holds references to some number of methods, and by invoking the delegate one causes all of these methods to be called.

The usefulness of delegates lies in the fact that the functions which invoke them are blind to the underlying methods they thereby cause to run (see, for instance, the discussion of events, below).

Page 23: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Delegati

From this brief description, it can be seen that delegates are functionally rather similar to C++'s 'function pointers'.

However, it is important to bear in mind two main differences. Firstly, delegates are reference types rather than value types. Secondly, some single delegates can reference multiple methods

Page 24: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Delegate Declaration and Instantiation

Each delegate is limited to referencing methods of a particular kind only. The type is indicated by the delegate declaration - the input parameters and return type given in the delegate declaration must be shared by the methods its delegate instances reference.

To illustrate this: a delegate specified as below can be used to refer only to methods which have a single String input and no return value:

public delegate void Print (String s);

Page 25: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Suppose, for instance, that a class contains the following method:

public void realMethod (String myString) {

   // method code

}

Another method in this class could then instantiate the 'Print' delegate in the following way, so that it holds a reference to 'realMethod':

Print delegateVariable = new Print(realMethod);

Page 26: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Razredi - dogodki• Jezikovna podpora dogodkom• Ključna beseda event nam omogoča določiti delegata, ki bo ustrezal

poklicanim metodam ob nastopu nekega dogodka.

public event AlarmEventHandler Alarm;

• Dogodek sprožimo s klicem dogodka

Alarm();

• Odjemalci se prijavijo na dogodek z operatorjem +=

eventSource.Alarm += new AlarmEventHandler(eventListener.AlarmRang);

Page 27: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Deklaracija delegata, prireditev metode delegatu

Page 28: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Prirejanje različnih metod

Page 29: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Creating a delegate value

Page 30: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Multicast delegati

Page 31: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Events = Special Delegate Variables

Page 32: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Izjeme (exceptions)

Page 33: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Stavek try

Page 34: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

System.Exception

Page 35: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Throwing an Exception

Page 36: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Hierarhija izjem

Page 37: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Searching for a catch Clause

Page 38: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

No Throws Clause in Method Signature

Page 39: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Namespaces and Assemblies

Page 40: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

C# Namespaces vs. Java Packages

Page 41: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Namespaces vs. Packages (continued)

Page 42: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Assemblies

Page 43: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Kako se tvorijo assemblies

Page 44: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Opcije prevajalnika

Page 45: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Opcije prevajalnika

Page 46: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Primeri prevajanj

Page 47: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Atributi

Page 48: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Atributi• Atributi so deklarativni elementi jezika

– pridevniki so na primer tudi deklarativni elementi– omogočajo dekoracijo elementov kode z dodatno informacijo

• assembly, modul, tip, član tipa, return value, parameter

• Atributi posplošujejo koncept deklarativnega elementa– atributi niso omejeni na vnaprej določeno množico– lahko se zmišljujemo svoje nove atribute– atributi in njihove vrednosti so dosegljivi v času prevajanja in v času izvajanja

[Obsolete("This class is obsolete")]class A{

public void F() {}}

Page 49: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Atributi

Page 50: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Atribut s parametri

Page 51: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

AtributiNekateri vnaprej definirani atributi

Ime atributa Opis

Browsable Vključenost lastnosti v okno lastnosti

SerializableDoloča naj bo razred ali struktura serializabilna

Obsolete Določa, da je nek element kode zastarel

ConditionalDoloča vključenost metode v odvisnosti od predproc. simbola

Page 52: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

AtributiZgled uporabe atributa Conditional

#define Debugpublic class Debug { [Conditional("Debug")] public static void Assert(bool cond, String s) { if (!cond) { throw new AssertionException(s); } } void DoSomething() { ... // If Debug is not defined, the next line is // not even called Assert((x == y), “X should equal Y”); ... }}

Page 53: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Še en primer: atribut Conditional

Page 54: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Tvoji lastni atributi

Page 55: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Niti (threads)

Page 56: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Sodelujoče niti (participating threads)

Page 57: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Primer

Page 58: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Stanja niti

Page 59: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Primer za Join

Page 60: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Medsebojno izobčenje (sinhronizacija)

Page 61: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Razred Monitor

Page 62: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Wait in Pulse

Page 63: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Primer: sinhroniziran medpomnilnik

Page 64: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Komentarji XML

Page 65: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Posebni komentarji (podobno javadoc)

Page 66: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Primer komentirane kode

Page 67: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Tvorjena XML datoteka

Page 68: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

XML oznake (XML tags)

Page 69: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Povzetek C#

Page 70: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Odprtokodni c#MCS: The Ximian C# compilerThe Mono C# compiler is considered feature C# 1.0 complete at this point and mature. MCS is able to compile itself and many more C# programs (there is a test suite included that you can use). It is routinely used to compile Mono, roughly 1.7 million lines of C# code.

The compiler is also fairly fast. On a IBM ThinkPad t40 it compiles 18,000 lines of C# code per second.

Work on C# 2.0 has started: some pieces of it are available on the standard compiler with the -2 switch (iterators, method conversions) and some others are available on the `gmcs' branch on CVS (generics)

Obtaining MCSThe Mono C# compiler is part of the `mcs' module in the Mono CVS you can get it from our Anonymous CVS server, or you can get nightly download page.

Page 71: Uvod v C# Drugi del. Dedovanje Sintaksa Prirejanje in preverjanje tipov.

Mono razhroščevalnik