170 likes | 330 Views
Serwery Aplikacji. ASP .NET Web Objects. NameSpace. 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.
E N D
Serwery Aplikacji ASP .NET Web Objects Arkadiusz Popa
NameSpace using System; usingSystem.Collections; usingSystem.Configuration; usingSystem.Data; usingSystem.Web; …. Dzięki temu mamy dostęp do metod z wymienionych przestrzeni nazw. Wraz ze stworzeniem nowego Web projektu otrzymujemy wygenerowany kod: 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; namespaceNazwaPrzestrzeniNazw { class Nazwa Klasy { public staticstringNazwaMetody() { … } } } Arkadiusz Popa NazwaProjektu.NazwaPrzestrzeniNazw..NazwaKlasy.NazwaMetody
Namespace … przykład // Nazwa Projektu: WebProjectOne namespaceUtils { namespaceTypes { classDigits { public enumnumeric{ … } } } } Powyższa deklaracja jest jednoznaczna z : // Nazwa Projektu: WebProjectOne namespaceUtils.Types { classDigits { public enumnumeric{ … } } } ArkadiuszPopa Użycie: WebProjectOne.Utils.Types.Digits.numeric
Metody dostępu do klas i metod Arkadiusz Popa
Dziedziczenie Arkadiusz Popa
Properties Standardowe podejście do set’erów i get’erów: class A { public int x; public intGetX(){ return this.x; } public voidSetX(intvalue){ this.x = value; } } Użycie: A a = new A(); intxpos = 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#: class A { public int x; public int X{ get { return this.x; } set { this.x = value; } } } Użycie: A a = new A(); intxpos = a.X; // wywołanie a.X.get a.X=xpos + 10; // wywołanie a.X.set Arkadiusz Popa
Propertie – read/writeonly 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; } } } ArkadiuszPopa
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 abstractclassShape { public Shape(){ } public abstractfloat Top { get; set; } public abstractfloatArea(); public abstractintDimension(); } Arkadiusz Popa
Klasa Abstrakcyjna Implementując klasę abstrakcyjną musimy dopisać zmienne, przeciążyć jej metody i ewentualnie napisać nowe public classCircle : Shape { floatfxCenter, fyCenter, fRadius; public Circle(){ … } public overridefloat Top { get { return fxCenter – fRadius; } set { fxCenter = value + fRadius; } } … } Arkadiusz Popa
Interfejs Interfejs to sposób na abstrakcyjną reprezentację klasy. public interfaceIfigure { float Top { get; set; } floatArea(); } Arkadiusz Popa
Namespace – Web Application Arkadiusz Popa