72
Uvod v C# Drugi del

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

Embed Size (px)

Citation preview

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