<?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>BLOCRACY &#187; OOP</title>
	<atom:link href="http://www.blocracy.com/tag/oop/feed" rel="self" type="application/rss+xml" />
	<link>http://www.blocracy.com</link>
	<description>no like other</description>
	<lastBuildDate>Sun, 29 Jan 2012 01:49:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>C# ile kullanıcı tanımlı tip geliştirmek ve Operator Overloading</title>
		<link>http://www.blocracy.com/c-ile-kullanici-tanimli-tip-gelistirmek-ve-operator-overloading</link>
		<comments>http://www.blocracy.com/c-ile-kullanici-tanimli-tip-gelistirmek-ve-operator-overloading#comments</comments>
		<pubDate>Wed, 03 Feb 2010 21:30:04 +0000</pubDate>
		<dc:creator>Kerem Bekman</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[constructor overloading]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[operator overloading]]></category>
		<category><![CDATA[rasyonel sayılar]]></category>

		<guid isPermaLink="false">http://www.blocracy.com/?p=284</guid>
		<description><![CDATA[C# veya .NET Framework çatısı altındaki herhangi bir dilde, kendi kullanım alanınıza özel tipler üretebilir. Size özel tipi operatör işlemlerine uyarlayabilirsiniz. Bu çalışmamız için Nesne Yönelimli Programlamlarının en temel özelliklerinden olan &#8220;Constructor Overloading&#8221; özelliğini sık kullanıcaz. Makale öncesine Constructor Overloading için bu adrese göz atmanızı öneririm. Kendimize özel yapacağımız tip rasyonel sayılar ve kendi işlemlerini [...]]]></description>
			<content:encoded><![CDATA[<p>C# veya .NET Framework çatısı altındaki herhangi bir dilde, kendi kullanım alanınıza özel tipler üretebilir. Size özel tipi operatör işlemlerine uyarlayabilirsiniz.</p>
<p>Bu çalışmamız için Nesne Yönelimli Programlamlarının en temel özelliklerinden olan &#8220;Constructor Overloading&#8221; özelliğini sık kullanıcaz. Makale öncesine Constructor Overloading için <a href="http://www.codeproject.com/KB/dotnet/ConstructorsInCSharp.aspx" target="_blank">bu</a> adrese göz atmanızı öneririm.</p>
<p>Kendimize özel yapacağımız tip rasyonel sayılar ve kendi işlemlerini destekleyen bir tip olacak.</p>
<p>Yapabileceğimiz işlemleri kısaca özetlersek</p>
<pre class="c-sharp">ras r1 = new ras("1/2");
// String ile Rasyonel Sayı Oluşturabilelim

ras r2 = new ras(6,8);
// Int ile Rasyonel Sayı Oluşturabilelim

ras r3 = new ras();
// Ve Değer atamadan tanımlayabilelim..

//Değer atama işlemi
r3.pay = 4;
r3.payda = 5;

ras r4 = r1 + r2; // Operator Overloading
r4.topla("1/5"); // String ile özel toplama
r4.topla(1, 2); // İnt ile Özel toplama
r4.sadelestir(); // Sadeleştirme

MessageBox.Show(r4.Goster()); // Rasyonel sayi gösterimi..</pre>
<p><span id="more-284"></span></p>
<p>Hemen Object sınıfından türemiş &#8220;ras&#8221; adlı bir sınıf yaratıyoruz..</p>
<pre class="c-sharp">public class ras
{
     public int pay;
     public int payda;

     public ras()
     {
          this.pay = 0;
          this.payda = 0;
     }

}</pre>
<p>Şimdi ras r2 = new ras(6,8); satırındaki yapıcı fonksiyonunu yaratıyoruz.</p>
<pre class="c-sharp">public class ras
{
     public int pay;
     public int payda;

     public ras()
     {
          this.pay = 0;
          this.payda = 0;
     }
     public ras(int a, int b)
     {
          this.pay = a;
          this.payda = b;
     }

}</pre>
<p>Hemen ardından String ile rasyonel sayıyı oluşturabilmek için 3. ek yapıcı fonksiyonumuzu kodlayalım.<br />
ras r1 = new ras(&#8220;1/2&#8243;);</p>
<pre class="c-sharp">public class ras
{
     public int pay;
     public int payda;

     public ras()
     {
          this.pay = 0;
          this.payda = 0;
     }
     public ras(int a, int b)
     {
          this.pay = a;
          this.payda = b;
     }
     public ras(string veri)
     {
          int orta = veri.IndexOf("/");
          // Bölmek için "/" karakterinin indisini alıyoruz.

          int uzunluk = veri.Length; //Verinin uzunluğu

          string payS = veri.Substring(0, orta);
          //Verinin "/" karakterine kadar ki kısmını payS stringine atıyoruz. 

          string paydaS = veri.Substring(orta + 1, uzunluk - orta - 1);
          //Aynı "/" karakterinden bir sonkraki karakterden başlayarak son karaktere kadar ki kısmınıda paydaS eşitliyoruz.

          //Ve bulduğumuz değerleri Integer'a çevirip pay ve paydaya atıyoruz.
          this.pay = System.Convert.ToInt32(payS);
          this.payda = System.Convert.ToInt32(paydaS);
     }

}</pre>
<p>Sınıfa özel özellikler eklemek için yukarıdaki parçalama işlemini private bir fonksiyon olarak yazıp diğer özelliklerde fonksiyonel olarak parçalayabilirsiniz.</p>
<p>Örnek özellik olarak topla() fonksiyonunu yapıyoruz</p>
<pre class="c-sharp">public class ras
{
     public int pay;
     public int payda;
     private string payS;
     private string paydaS;
     private int orta;
     private int uzunluk;

     public ras()
     {
          this.pay = 0;
          this.payda = 0;
     }
     public ras(int a, int b)
     {
          this.pay = a;
          this.payda = b;
     }
     public ras(string veri)
     {
          orta = veri.IndexOf("/");
          // Bölmek için "/" karakterinin indisini alıyoruz.

          uzunluk = veri.Length; //Verinin uzunluğu

          payS = veri.Substring(0, orta);
          //Verinin "/" karakterine kadar ki kısmını payS stringine atıyoruz. 

          paydaS = veri.Substring(orta + 1, uzunluk - orta - 1);
          //Aynı "/" karakterinden bir sonkraki karakterden başlayarak son karaktere kadar ki kısmınıda paydaS eşitliyoruz.

          //Ve bulduğumuz değerleri Integer'a çevirip pay ve paydaya atıyoruz.
          this.pay = System.Convert.ToInt32(payS);
          this.payda = System.Convert.ToInt32(paydaS);
     }
     public void topla(int a, int b)
     {
          this.pay = a * this.payda + b * this.pay;
          this.payda = b * this.payda
     }

}</pre>
<p>topla() gibi aklımıza gelebilecek bir çok özellikler ekleyebiliriz..</p>
<h2>OPERATOR OVERLOADING</h2>
<p>Yaptığımız tipi oparatörlerle beraber kullanmak istersek eğer .NET Framework bize sunduğu &#8220;operator&#8221; on eki ile yapabiliyoruz..</p>
<p>operator overloading fonksiyonlarının <a href="http://blogs.msdn.com/ericlippert/archive/2007/05/14/why-are-overloaded-operators-always-static-in-c.aspx">bazı önemli nedenlerden</a> dolayı public ve static olmak zorundadır..</p>
<p>Kullanımı çok basittir.</p>
<p>ras r4 = r1 + r2; için</p>
<pre class="c-sharp">public static ras operator + (ras r1, ras r2)
{
     //İşlemler..
}</pre>
<p>&#8220;+&#8221; operatörüne oparatör overloading işlemi uyguladığımızda aynı zamanda += oparatörünüde uygulanmış oluyor..</p>
<p>ras r4 = r1 + 5; için</p>
<pre class="c-sharp">public static ras operator + (ras r1, int i)
{
     //İşlemler..
}</pre>
<p>if(r1 == r2){} için</p>
<pre class="c-sharp">public static bool operator == (ras r1, ras r2)
{
     //İşlemler..
}</pre>
<p>Örnek olarak ras tipindeki &#8220;+&#8221; operatörü için şu şekilde kod yazabiliriz.</p>
<pre class="c-sharp">public static ras operator +(ras c1, ras c2)
{
    return new ras(c1.pay * c2.payda + c1.payda * c2.pay, c1.payda * c2.payda);
}</pre>
<p>sadelestir() Goster() &gt; &lt; == operatörleri gibi birçok özellik ekleyip dahada geliştirilebilir..</p>
<p>Türkiyenin en iyi <a href="http://www.jenga.com.tr/">kozmetik</a> sitesi.<a title="uçan balık" href="http://www.ucanbalik.info/">Uçan balık</a> ile air swimmers çok iyi fırsatlarda.<a title="antakya biberi" href="http://www.antakyabiber.com/">Antakya biberi</a> ile zayıflamak artık çok kolay.Online <a title="uçak bileti" href="http://www.ucakbilet.com.tr/">uçak bileti</a> rezarvasyon artık çok daha kolay.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blocracy.com/c-ile-kullanici-tanimli-tip-gelistirmek-ve-operator-overloading/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

