CS-opas:Ilmentymät
Mureakuha
- Teknisistä rajoituksista johtuen artikkelin yllä näkyvä otsikko on virheellinen. Oikea otsikko on C#-opas: Ilmentymät.
Sisällysluettelo |
[muokkaa]
Ilmentymien johdanto
- Ilmentymät määrittää rajapinnat siitä mitä luokan tulee toteuttaa.
- Luokka voi periä monta ilmentymää.
[muokkaa]
Ensimmäinen
using System; interface IEsimerkkiIlmentyma { // Esimerkki metodin määrittämisestä int testiMetodi(int eka, int toka); // Esimerkki ominaisuuden määrittämisestä String testiOminaisuus { get; } // Esimerkki tapahtuman määrittämisestä event testiTapahtuma Tapahtuma; // Esimerkki indeksoijan määrittämisestä double this[int index] { get; set; } } public delegate void testiTapahtuma(int arvo); public class EsimerkkiLuokka:object, IEsimerkkiIlmentyma { protected double[] testiLuku; public event testiTapahtuma Tapahtuma; public EsimerkkiLuokka() { testiLuku = new double[50]; } public int testiMetodi(int eka, int toka) { Console.WriteLine("testiMetodi({0},{1}",eka,toka); return eka+toka; } public String testiOminaisuus { get { return "Testi onnistui!"; } } public double this[int solu] { get { if(solu < 50 && solu >=0) { return this.testiLuku[solu]; } else { Console.WriteLine("Virhe!!!"); return 0; } } set { if(solu < 50 && solu >=0) { this.testiLuku[solu] = value; } else { Console.WriteLine("Virhe!!!"); } } public void MikaTahansa(IEsimerkkiIlmentyma) { //Mikä tahansa metodi voi määrittää parametrien tyypiksi //Ilmentymän, nyt kaikki ne luokat, jotka perii kyseisen //ilmentymän voivat olla parametrina tälle metodille. } } public static void Main(String[] args) { EsimerkkiLuokka olio = new EsimerkkiLuokka(); EsimerkkiLuokka olio2 = new EsimerkkiLuokka(); olio.MikaTahansa(olio2); //Seuraavaksi tehdään tyyppi muunnos perityyn ilmentymään IEsimerkkiIlmentyma tmp = olio as IEsimerkkiIlmentyma; if(tmp != null) { tmp[12] = 54.8; Console.WriteLine("{0}",tmp[12]); } } }
[muokkaa]
Usean ilmentymän toteuttaminen
[muokkaa]
Esimerkki
using System; interface I1 { void Metodi(); } interface I2 { void Metodi(); } public class E2: I1, I2 { public void Metodi() { System.Console.WriteLine("JEPS!"); } public static void Main() { E2 e = new E2(); I1 i1 = (I1)e; i1.Metodi(); //Tulostaa JEPS! I2 i2 = (I2)e; i2.Metodi(); //Tulostaa JEPS! } }
[muokkaa]
Esimerkki eroteltu päällekkäisyys
using System; interface I1 { void Metodi(); } interface I2 { void Metodi(); } public class E2: I1, I2 { //Ilmentymien erottelun lisäys //Huom näkynyyttä ei määritetä aina public void I1.Metodi() { System.Console.WriteLine("1"); } void I2.Metodi() { System.Console.WriteLine("2"); } public static void Main() { E2 e = new E2(); I1 i1 = (I1)e; i1.Metodi(); //Tulostaa 1 I2 i2 = (I2)e; i2.Metodi(); //Tulostaa 2 } }
