<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>C# kódok &#187; interface</title>
	<atom:link href="http://users.atw.hu/csharpkodok/" rel="self" type="application/rss+xml" />
	<link>http://users.atw.hu/csharpkodok</link>
	<description>Csharp kódok gyüjteménye</description>
	<lastBuildDate>Fri, 07 Aug 2009 11:44:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Interfész (elmélet)</title>
		<link>http://users.atw.hu/csharpkodok/?p=34</link>
		<comments>http://users.atw.hu/csharpkodok/?p=34#comments</comments>
		<pubDate>Wed, 15 Jul 2009 20:42:03 +0000</pubDate>
		<dc:creator>nameless</dc:creator>
				<category><![CDATA[elmélet]]></category>
		<category><![CDATA[kód]]></category>
		<category><![CDATA[interface]]></category>

		<guid isPermaLink="false">http://users.atw.hu/csharpkodok/?p=34</guid>
		<description><![CDATA[Interfész, interface (elmélet):

Vannak az emberek és az állatok, na meg a szamarak. Fingani mindegyik tud, magyarul egy ilyen felületet mindegyik megvalósít:

public interface IFarter
{
  bool DoFart();
&#160;
  event EventHandler&#60;ShitFlowingOnMyLegEventArgs&#62; ShitFlowingInMyLeg;
}
&#160;
public class ShitFlowingOnMyLegEventArgs : EventArgs
{
  public ShitFlowingOnMyLegEventArgs(bool leftLeg, double ammountInKilogramms)
  {
    this.LeftLeg = leftLEg;
    this.AmmountInKilogramms = ammountInKilogramms;
  [...]]]></description>
			<content:encoded><![CDATA[<p>Interfész, interface (elmélet):<br />
<span id="more-34"></span><br />
Vannak az emberek és az állatok, na meg a szamarak. Fingani mindegyik tud, magyarul egy ilyen felületet mindegyik megvalósít:</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;">public interface IFarter
{
  bool DoFart();
&nbsp;
  event EventHandler&lt;ShitFlowingOnMyLegEventArgs&gt; ShitFlowingInMyLeg;
}
&nbsp;
public class ShitFlowingOnMyLegEventArgs : EventArgs
{
  public ShitFlowingOnMyLegEventArgs(bool leftLeg, double ammountInKilogramms)
  {
    this.LeftLeg = leftLEg;
    this.AmmountInKilogramms = ammountInKilogramms;
  }
&nbsp;
  public bool LeftLeg { get; private set; }
&nbsp;
  public double AmmountInKilogramms { get; private set; }
}</pre></div></div>

<p>A DoFart metódussal meg lehet kérni a delikvenst, hogy ugyan, fingjon már egyet. Ha tud, akkor megereszt egy komolyabb lepkét, és visszatér &#8216;true&#8217;-val, ha nem, akkor csak elvörösödik a feje, bef0s1k, erről egy eseménykezelőn keresztül tájékoztatja a külvilágot, és a visszatérési érték &#8216;false&#8217;.</p>
<p>A felület csak azt írja le, hogy ez a viselkedés hogy fog látszani, és hogyan kezelhető a külvilág számára. Absztrakt fogalom, nem tudjuk, hogy a fingásra képes élőlények hogyan finganak, de azt tudjuk, hogyan kell kezelni a helyzetet. Comprende?</p>
<p>Nézzük tovább:</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;">public abstract Animal : IFarter
{
  abstract bool DoFart();
&nbsp;
  event EventHandler&lt;ShitFlowingOnMyLegEventArgs&gt; ShitFlowingOnMyLeg;
}</pre></div></div>

<p>Az állat absztrakt osztályfogalom, mert ebből fog származni minden konkrét állatfaj, de itt már jelezhetjük a felület megvalósíátást (és megvalósíthatjuk absztrakt módon), mert akinek bele van, az fingani is fog. Ebből az osztályból lehet származtatni a szamarat, és a legnagyobb állatot az embert. Mindegyik ismerni fogja az IFarter felületet. De akkor mire jó a felület, miért nem elég csak az absztrakt ős?<br />
Mit tud egy fingópárna? Na? Bingó: fingani, mint a gép! (Maximum nem fo&#8230;kakilja le a lába szárát, de az eseményt nem kötelező meghívni):</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;">public sealed class FartPillow : IFarter
{
  public bool DoFart()
  {
    // Itt implementalja a belso f1ng0mechanizmust
  }
&nbsp;
  event EventHandler&lt;ShitFlowingOnMyLegEventArgs&gt; ShitFlowingInMyLeg;
  // ezzel meg nem foglalkozik, bar az uj modellek csodakra lehetnek kepesek
}</pre></div></div>

<p>Anélkül, hogy az állatoknak és egy teljesen más alapokon nyugvó fingó párnak közös őstől kellett volna származtatni, tudunk belőlük kezelni egy egységes, nagy és összetartó fingó közösséget, akinek minden tagja eregeti a buborékot, de nagyon durván. Ezeket be tudjuk állítani egy sorba:</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;">List&lt;IFarter&gt; faterList = new List&lt;IFater&gt;();</pre></div></div>

<p>Bele tudjuk dobni egy gödörbe:</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;">Stack&lt;IFater&gt; farterStack = new Stack&lt;IFater&gt;();</pre></div></div>

<p>Mind a gödör, mind a sor megvalósítja az IEnumaerable<T> felületet, amin keresztül tudjuk iterálni a benne lévő elemeket, és a benne lévő elemek megvalósítják az IFarter feleületet, szóval tudnak fingani, ezért:</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;">foreach (IFarter farter in faterList) // IEnumerable&lt;T&gt;-t hasznal a foreach!
{
  farter.DoFart();
}
&nbsp;
foreach (IFarter farter in faterStack)
{
  farter.DoFart();
}</pre></div></div>

<p>Hála a interfészeknek van egységes felület, amin a hasonló viselkedéssel, de teljesen más megvalósítással rendelkező objektumokat képesek vagyunk azonos módon (mindenféle cast-elések nélkül) kezelni.</p>
<p>Durván ennyi. <img src='http://users.atw.hu/csharpkodok/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>írta: Chikk</p>
]]></content:encoded>
			<wfw:commentRss>http://users.atw.hu/csharpkodok/?feed=rss2&amp;p=34</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
