ConfigSection   zodpovězená otázka

ASP.NET WebForms

Ahojte

Snazim sa o vytvorenie vlastne Config Section a sice mi to nepride ako nic zlozite, ale jednej veci nerozumiem.

Skusal som to podla tohto:

http://blog.aspnet.sk/tomas/archive/2007...

No inde som videl "this" nahradeny "base". Funguje to v oboch pripadoch, ale vyznam base a this je predsa odlisny, nie ? Moj problem je, ze teraz nechapem aky je ich prinos v tom kode, kedze funguje v oboch pripadoch.

Dakujem

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud víte/tušíte co se pod pojmem this a base "schovává".tak Vám to musí být jasné.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No base sluzi ako odkaz na "nadradenu" triedu, resp tu od ktorej dedim. This je odkaz na aktualnu instanciu. Teda aspon takto som to pouzival ja a je mozne, ze nepoznam vsetkych vyznamy tychto klucovych slov. Preco tam je this chapem, ale base nie ...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co jsem koukal,tak v uvedením případě se this volá správně u Getterů a Setterů,aby se načetla data pouze pro aktuální instanci.

Base se pak volá v rámci metod,aby se nové nastavení/chování "promítlo" i na bázovou třídu.Nejsem zrovna řečník,takže můj popis nemusí být pochopitelný,ale snad to alespon napoví.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V tomto případě je jedno, jestli používáte this["klíč"] nebo base["klíč"]. Vy v té poděděné třídě nemáte nikde deklaraci toho indexeru.

Možná to bude zřejmější na tomto příkladě:

public class A {
  public virtual void Test() {
    Console.WriteLine("test");
  }
}

public class B : A {
  public void JinaMetoda() {
    // všechna tato volání jsou stejná
    this.Test();
    base.Test();
    Test();
  }
}

Protože ve třídě B nepřepisujete metodu Test klíčovým slovem override, je jedno, jestli zavoláte this.Test() nebo base.Test(). Pořád je to ta samá metoda.

U indexeru je to stejné, indexer je jenom speciální property, tedy dvojice metod:

public string this[string key] {
  get { ... }
  set { ... }    
}

Pokud ho přes override nepřepíšete ve vaší třídě, pak můžete volat this[""] i base[""] a je to stejné.

Obecně je zvyklostí volat base, abyste naznačili, že je to poděděná metoda a ne metoda v té třídě.

U metod a vlastností je navíc zvyklost to "this." ani nepsat, jen to otravuje a znepřehledňuje kód. U indexeru se napsat musí, to je jediná výjimka.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

dakujem, teraz v tom uz mam jasnejsie :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback