Serwery Aplikacji ASP .NET Web Objects Arkadiusz Popa
NameSpace Wraz ze stworzeniem nowego Web projektu otrzymujemy wygenerowany kod: using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; …. Dzięki temu mamy dostęp do metod z wymienionych przestrzeni nazw. Arkadiusz Popa
Namespace .. Bez podania przestrzeni nazw musielibyśmy pisać np.: wywołanie metod wraz z podaniem ich przestrzeni System.Array.Sort(strArray); System.Web.HttpCookie; Poprzez załączenie do projektu przestrzeni nazw np.: System możemy wywoływać metody/zmienne bezpośrednio: Array.Sort(strArray); HttpCookie; Arkadiusz Popa
Namespace… Przestrzenie nazw pozwalają nam na: ochronę kodu przed konfliktem nazw (namespace collisions) Takie konflikty zdarzają się w dużych projektach, gdzie występuje duża ilość obiektów, gdzie dwa obiekty mogą miec nadane identyczne nazwy. Do stworzenia własnej przestrzeni nazw wystarczy „otoczyć” wybrane klasy blokiem namespace; namespace NazwaPrzestrzeniNazw { class Nazwa Klasy { public static string NazwaMetody() { … } Arkadiusz Popa NazwaProjektu.NazwaPrzestrzeniNazw..NazwaKlasy.NazwaMetody
Namespace … przykład Powyższa deklaracja jest jednoznaczna z : // Nazwa Projektu: WebProjectOne namespace Utils { namespace Types { class Digits { public enum numeric { … } Powyższa deklaracja jest jednoznaczna z : // Nazwa Projektu: WebProjectOne namespace Utils.Types { class Digits { public enum numeric { … } Użycie: WebProjectOne.Utils.Types.Digits.numeric Arkadiusz Popa
Metody dostępu do klas i metod Metoda Opis public Dostęp do wszystkich wartości w klasach i projektach protected Dostęp do wartości w klasie bieżącej i w klasach jej pochodnych private Dostęp do wartości tylko w klasie bieżącej Arkadiusz Popa
Dziedziczenie C# Opis KlasaPochodna : KlasaBazowa Dziedziczy wartości z klasy Bazowej do pochodnej virtual Deklaruje że wartość w klasie bazowej może zostać nadpisana w klasie pochodnej ovveride Deklaracja że nazwa w klasie pochodnej nadpisuje taka samą nazwę w klasie bazowej abstract Deklaruje że wartość musi zostać nadpisana w klasie pochodnej this Wywołanie wartości z obecnej klasy Arkadiusz Popa
Properties Standardowe podejście do set’erów i get’erów: Użycie: class A { public int x; public int GetX(){ return this.x; } public void SetX(int value){ this.x = value; Użycie: A a = new A(); int xpos = GetX(); a.SetX(xpos + 10); Arkadiusz Popa
Properties Properies (Właściwościomierz ) jest wartością pomiędzy polem a metodą. Wygląda jak pole, ale strukture ma podobną do metody. ModyfikatorDostępu Typ NazwaWłaściwości { get { //akcesor do czytania wartości } set { //akcesor do pisania wartości Arkadiusz Popa
Properties Podejście do set’erów i get’erów w C#: Użycie: class A { public int x; public int X{ get { return this.x; } set { this.x = value; Użycie: A a = new A(); int xpos = a.X; // wywołanie a.X.get a.X=xpos + 10; // wywołanie a.X.set Arkadiusz Popa
Propertie – read/write only Property może występować jako tylko do czytania class A { public int x; public int X{ get { return this.x; } Lub tylko do zapisywanie class A { public int x; public int X{ set { this.x = value; } Arkadiusz Popa
Proprties – gdzie jest błąd? Najczęstszą przyczyną błędów jest StackOverflowException wynikający ze złego użycia akcesorów dostępu. class A { public int x; public int X{ get { return this.X; } set { this.X = value; Błąd ten powstaje w wyniku wywołania rekurencyjnego pętli. Jest to jeden z najtrudniejszych do zidentyfikowania błędów. Arkadiusz Popa
Klasa Abstrakcyjna Jest to typ klasy z której nie można tworzyć obiektów. Nie zawiera również ciała poszczególnych metod. Wszystkie klasy z niej dziedziczące będą posiadały zaimplementowane wyszczególnione w niej metody i akcesory. public abstract class Shape { public Shape(){ } public abstract float Top { get; set; public abstract float Area(); public abstract int Dimension(); Arkadiusz Popa
Klasa Abstrakcyjna Implementując klasę abstrakcyjną musimy dopisać zmienne, przeciążyć jej metody i ewentualnie napisać nowe public class Circle : Shape { float fxCenter, fyCenter, fRadius; public Circle(){ … } public override float Top { get { return fxCenter – fRadius; set { fxCenter = value + fRadius; Arkadiusz Popa
Interfejs Interfejs to sposób na abstrakcyjną reprezentację klasy. public interface Ifigure { float Top { get; set; } float Area(); Arkadiusz Popa
Namespace – Web Application Zawartość System.Web Application, Browser, Cache, Cookies, Request, Response. Np.:Application definiuje nam Global.asax System.Web.SessionState Obiekt Session. Używane do przechowywanie stanu sesji. System.Web.Services Obiekt WebService. Używane do tworzenia i używania serwisów Web System.Web.UI Obiekty Page i Control. Używane do tworzenia kontroli interfejsu użytkownika System.Web.Security Autentyfikacja obiektów i modułów. Definiuje rolę, przywileje itp.. Arkadiusz Popa