Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 6
Interfejsy Interfaces
Attributes Much of the C# language enables the programmer to specify declarative information about the entities defined in the program. C# enables programmers to invent new kinds of declarative information, called attributes. Programmers can then attach attributes to various program entities, and retrieve attribute information in a run-time environment. Attributes are defined through the declaration of attribute classes, which may have –positional and –named parameters. Attributes are attached to entities in a C# program –using attribute specifications, and –can be retrieved at run-time as attribute instances.
Attributes, cont. Attribute classes –A class that derives from the abstract class System.Attribute, whether directly or indirectly, is an attribute class. The declaration of an attribute class defines a new kind of attribute that can be placed on a declaration. –By convention, attribute classes are named with a suffix of Attribute. Uses of an attribute may either include or omit this suffix. Attribute specification –Attribute specification is the application of a previously defined attribute to a declaration. –An attribute is a piece of additional declarative information that is specified for a declaration. Attribute instances –An attribute instance is an instance that represents an attribute at run-time. –An attribute is defined with an attribute class, positional arguments, and named arguments. –An attribute instance is an instance of the attribute class that is initialized with the positional and named arguments.
Interfejs – podstawowe własności An interface defines a contract. A class or struct that implements an interface must adhere (dotrzymywać) to its contract. The declaration takes the following form: [attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
Interfejs – podstawowe własności, cd attributes (Optional) Additional declarative information modifiers (Optional) The allowed modifiers are new and the four access modifiers identifier The interface name base-list (Optional) A list that contains one or more explicit base interfaces separated by commas interface-body Declarations of the interface members [attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
Interfejs – podstawowe własności, cd2 An interface can be a member of a namespace or a class and can contain signatures of the following members: –Methods –Properties –Indexers –Events An interface can inherit from one or more base interfaces. Example: the interface IMyInterface inherits from two base interfaces, IBase1 and IBase2: interface IMyInterface: IBase1, IBase2 { void MethodA(); void MethodB(); }
Interfejs – podstawowe własności, cd3 Interfaces can be implemented by classes and structs. The identifier of the implemented interface appears in the class base list. For example: class Class1: Iface1, Iface2 { // class members } When a class base list contains a base class and interfaces, the base class comes first in the list. For example: class ClassA: BaseClass, Iface1, Iface2 { // class members }
C# Delegacje Delegate(s) Delegata to obiekt, który przechowuje referencje do metody. Podczas wywoływania tego obiektu delegaty wywoływana jest metoda, której referencja była przechowywana. Aby móc przypisać metodę do delegaty musi ona spełniać pewien warunek, tym warunkiem jest zgodność deklaracji metody i delegaty. Ogólna deklaracja delegaty: delegate typ_zwracany nazwa_delegaty(parametry) ; Delegate deklaruje się zawsze po deklaracjach przestrzeni nazw, nie jest ona składnikiem klas. Bardzo prosty przykład, w którym to tworzony jest obiekt takiej delegaty:
C# Delegacje -Przykład using System; delegate void delegata(int liczba); class Klasa_a { public int a; public Klasa_a(int a){ this.a = a;} public void metoda(int cyferka){ Console.WriteLine(cyferka * a);} } class Klasa_b { public static void Liczba(int c){Console.WriteLine(c);} } class Pokaz { public static void Main() { Klasa_a A = new Klasa_a(4); delegata d1 = new delegata(A.metoda); delegata d2 = new delegata(Klasa_b.Liczba); d1(3); d2(7); }}
C# Delegacje –Przykład 1 - komentarz Referencje do metody przesyła się jakby to był parametr konstruktora delegaty: delegata d1 = new delegata(A.metoda); Parametr dla metody przesyła się dopiero podczas wywołania delegaty: d1(3); Sednem wykorzystania delegat są łańcuchy wywołań, dzięki którym można wywołać kilka delegat pod rząd. Przykład! Aby utworzyć łańcuch wywołań należy najpierw dla każdej metody utworzyć delegate, następnie należy utworzyć jedną delegate do której to przypisuje się referencję pierwszego wywołania potem za pomocą złożonych operatorów przypisania dodaje się kolejne. Aby odjąć jakąś metodę stosuje się minus czyli -= (złożony operator przypisania).