CS-opas:Ilmentymät

Mureakuha

Loikkaa: valikkoon, hakuun
Teknisistä rajoituksista johtuen artikkelin yllä näkyvä otsikko on virheellinen. Oikea otsikko on C#-opas: Ilmentymät.

Sisällysluettelo

Ilmentymien johdanto

  • Ilmentymät määrittää rajapinnat siitä mitä luokan tulee toteuttaa.
  • Luokka voi periä monta ilmentymää.

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]);
		}
 
	}
}

Usean ilmentymän toteuttaminen

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!
	}
}

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
	}
}
Henkilökohtaiset työkalut