Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Promjeniti tip argumenta metode prilikom nasledjivanja intefejsa

[es] :: .NET :: Promjeniti tip argumenta metode prilikom nasledjivanja intefejsa

[ Pregleda: 3200 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sale_123
C++ Developer
Wien

Član broj: 23293
Poruke: 219
*.gradiska.com.



+120 Profil

icon Promjeniti tip argumenta metode prilikom nasledjivanja intefejsa03.07.2005. u 22:06 - pre 228 meseci
Kako mogu da promenim tip argumenta prlikom nasledjivanja interfejsa

Npr.
Code:

public interface IMyList
{
public void Add (object value);
}

public class Implem : IMyList
{
public void Add (Control value)
}



Znam da je ovo moguce ali ne znam kako to izvesti. Ociti primjer je
System.Windows.Forms.Control.ControlCollection
gdje ta klasa nasledjuje IList ali matoda Add ima argument tipa Control a ne object
...
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Promjeniti tip argumenta metode prilikom nasledjivanja intefejsa04.07.2005. u 12:40 - pre 228 meseci
Ne radi se ovde o nasledjivanju nego o overloadingu... Interfejsi nemaju kod, pa ne postoji nasledjivanje interfejsa (to me najvise iritiralo u shantravim prevodima strucne literature ).
Nasledjuje se kod, ne struktura. Interfejsi se IMPLEMENTIRAJU. Sta vise, kad jedan interfejs "nasledjuje" drugi, ni to nije nasledjivanje nego prosirivanje postojeceg interfejsa. Kad klasa implementira interfejs MORA da implementira SVE metode i propertije makar oni bili prazni. Tipovi parametara cine deo potpisa metoda i ne mogu da se menjaju, tj. Add(object) i Add(Control) su dva razlicita metoda. Ono sto si ti video je ovaj kod (uprosteno)

Code:

public interface IMyList
{
public void Add (object value);
}

public class Implem : IMyList
{
   public void new Add (object value) {}
   public void new Add (Control value) {}
}


ono sto contorlcollection ima u implementaciji IList.Add metoda je:

Code:

int IList.Add(object control)
{
      if (control is Control)
      {
            this.Add((Control) control);
            return this.IndexOf((Control) control);
      }
      throw new ArgumentException("control");
}


kao sto vidi, proveri da li je object tipa COntrol i ako jeste pozove svoj ne-interfejski Add(Control).
Ono sto je ovde nezgodno je sto C# ne dozvoljava non-public implementacije interfejsa. Medjutim, bas ta klasa koju pominjes ima Add implementiran kao private, zanimljivo...

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Sale_123
C++ Developer
Wien

Član broj: 23293
Poruke: 219
*.gradiska.com.



+120 Profil

icon Re: Promjeniti tip argumenta metode prilikom nasledjivanja intefejsa05.07.2005. u 12:22 - pre 228 meseci
Citat:
mmix: Ne radi se ovde o nasledjivanju nego o overloadingu... Interfejsi nemaju kod, pa ne postoji nasledjivanje interfejsa (to me najvise iritiralo u shantravim prevodima strucne literature :().
Nasledjuje se kod, ne struktura. Interfejsi se IMPLEMENTIRAJU. Sta vise, kad jedan interfejs "nasledjuje" drugi, ni to nije nasledjivanje nego prosirivanje postojeceg interfejsa. Kad klasa implementira interfejs MORA da implementira SVE metode i propertije makar oni bili prazni. Tipovi parametara cine deo potpisa metoda i ne mogu da se menjaju, tj. Add(object) i Add(Control) su dva razlicita metoda. Ono sto si ti video je ovaj kod (uprosteno)


Dobro sad, znam ja to ali nisam vodio racuna o terminologiji jer mi je ovo bio veci problem nego terminologija

Sto se tice zaglavlja ControlCollection.Add zaglavlje ide ovako
Code:
public virtual void Add (Control value)

to je bar ono sto pise u dokumentaciji.

Citat:
public interface IMyList
{
public void Add (object value);
}

public class Implem : IMyList
{
public void new Add (object value) {}
public void new Add (Control value) {}
}

Nije dozvoljeno rec new zato sto metoda Add (Control value) ne prikriva Add (object value) zbog razlicitih parametara i dolazi do polimorfizacije pa se na takav nacin ne moze rijesiti ovaj problem

Citat:
Ono sto je ovde nezgodno je sto C# ne dozvoljava non-public implementacije interfejsa. Medjutim, bas ta klasa koju pominjes ima Add implementiran kao private, zanimljivo...


Za ovo ne znam ali cinjenica je da ControlCollection a i druge klase koje se nalaze u sklopu .Net Framework-a imaju implementaciju interfejsa i njihovih metoda ali sa drukcijim tipovima parametara.

[Ovu poruku je menjao Sale_123 dana 05.07.2005. u 13:23 GMT+1]

[Ovu poruku je menjao Sale_123 dana 05.07.2005. u 14:03 GMT+1]
...
 
Odgovor na temu

Sale_123
C++ Developer
Wien

Član broj: 23293
Poruke: 219
*.gradiska.com.



+120 Profil

icon Re: Promjeniti tip argumenta metode prilikom nasledjivanja intefejsa05.07.2005. u 13:06 - pre 228 meseci
Rijesio sam problem. Eksplicitnom implementacijom metode ta metoda postaje nevidljiva za sve instance te klase koja implementira interfejs.


[Ovu poruku je menjao Sale_123 dana 05.07.2005. u 14:14 GMT+1]
...
 
Odgovor na temu

[es] :: .NET :: Promjeniti tip argumenta metode prilikom nasledjivanja intefejsa

[ Pregleda: 3200 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.