<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Aktenyazilim&#039;s Blog</title>
	<atom:link href="http://aktenyazilim.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://aktenyazilim.wordpress.com</link>
	<description>eğitime devam</description>
	<lastBuildDate>Thu, 22 Dec 2011 22:13:54 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='aktenyazilim.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Aktenyazilim&#039;s Blog</title>
		<link>http://aktenyazilim.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://aktenyazilim.wordpress.com/osd.xml" title="Aktenyazilim&#039;s Blog" />
	<atom:link rel='hub' href='http://aktenyazilim.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Bölüm3:Textlerde arama,değiştirme ve kodlama</title>
		<link>http://aktenyazilim.wordpress.com/2011/11/12/bolum3searching-modifying-and-encoding-text/</link>
		<comments>http://aktenyazilim.wordpress.com/2011/11/12/bolum3searching-modifying-and-encoding-text/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 20:33:58 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm3:Textlerde arama değiştirme ve kodlama]]></category>
		<category><![CDATA[and Encoding Text]]></category>
		<category><![CDATA[Modifying]]></category>
		<category><![CDATA[Searching]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=181</guid>
		<description><![CDATA[Bir çok programın ortak noktası text işlemektir. Kullanıcının giirmiş olduğu bir yazıyı belki doğrulamaya belki yeniden formatlamaya ihtiyacımız olabilir.Bir çok programcı text dosyası içersinden önemli verileri işlemek de isteyebilir. Bu sistemler sıksık standart olmayan kodlama teknikleri kullanır. Ek olarak programcı çıkış dosyasını giriş dosyasından farklı bir formatta kodlamak isteyebilir. Bu bölümde regular expression ile giriş [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=181&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bir çok programın ortak noktası text işlemektir. Kullanıcının giirmiş olduğu bir yazıyı belki doğrulamaya belki yeniden formatlamaya ihtiyacımız olabilir.Bir çok programcı text dosyası içersinden önemli verileri işlemek de isteyebilir. Bu sistemler sıksık standart olmayan kodlama teknikleri kullanır. Ek olarak programcı çıkış dosyasını giriş dosyasından farklı bir formatta kodlamak isteyebilir.</p>
<p>Bu bölümde regular expression ile giriş doğrulama,texti tekrardan formatlama ve veriyi seçip çıkartma işlemlerini yapacağız.  Ayrıca text dosyasında farklı kodlama tekniklerini kullanmayı görecez.</p>
<h2><strong>Ders 1.Regular Expression Formu</strong></h2>
<p>Geliştiriciler text işlemeye sık sık ihtiyaç duyar. Örneğin bir kullanıcı giriş formunda kullanıcının girdiği özel karakterleri silmek yada değiştirmek isteyebilirsiniz.</p>
<p>Bir Regular Expression bir stringin karakterlerini belirtilen formatta olup olmadığını denetleyebilir. Text i değiştirmek veya textin belli parçasını seçip çıkartmak için regular expression kullanılır.Text üzerinde karar vermek için regular expression  yaratabilir, stringin tamamen, integerdanmı, yoksa stringin içindeki karakterlerin küçük harflemi veya hexadecimal girişten mi oluştuğunu görebilirsiniz. Text içersinden html linki yada resim dosyası ismini seçip alabilirsiniz.Son olarak regular expression kullanarak text formatını değiştirebilir veya hatalı karakterleri silebilirsiniz.</p>
<p>Bu ders sonunda:</p>
<p>-Regular expression kullanarak belirtilen şablonda stringleri karşılaştırabilir</p>
<p>-bir text dosyasından veriyi seçi çıkarabilir.</p>
<p>-text verisini yeniden formatlayabilirsiniz.</p>
<p><strong>Regular expression kullanarak nasıl şablon karşılaştırması  yapılır?</strong></p>
<p>RegularExrpression test etmek için console app oluşturuyoruz.  iki string girecez, ve ilk stringi ikincisiyle karşılaştıracaz. aşağıdaki kodda gösterilmiştir. system.Text.RegularExpressions namespacei eklenmiştir.</p>
<blockquote>
<pre>Console.Write("regularexp giriniz:");
            string regularexp = Console.ReadLine();
            Console.Write("karşılaştırma için giriniz");
            string input = Console.ReadLine();
            if (Regex.IsMatch(input, regularexp))
                Console.WriteLine("girdiğiniz değer reg exp. uygun");
            else
                Console.WriteLine("yanlış deger girdiniz:");</pre>
</blockquote>
<pre>Bu kodu çalıştırıdğımızda reg exp olarak ^\d{5}$ girdiğimizde;karşılaştırma stringimiz 12345 olduğunda geçerli
reg exp. , 1234 girdiğimizde hatalı reg exp. uyarısını alırız.Eğer girilen string regular expressiona  uygun ise
Regex.IsMatch metodu  true döndürür. Bu örnekte ^\d{5}$ ifadesi şunları belirtir: string tam olarak 5  numerik digit
olmalı.  ^ işareti stringin başlangıcını, \d numeric digit olduğunu {5} 5 karakter olacağını ve $ ise stringin sonunu gösterir.
Eğer ilk karakteri silerseniz patternin  anlamını büyük  ölcüde değiştirmiş oluruz. \d{5}$ 5 numarayı doğrular
fakat abcd12345 i de doğru kabul eder.  REgular exp. ile karışık giriş patternleri kullanılabilir. aşağıdaki kodda
email adres karşılaştırması görülüyor.
^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))
([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$</pre>
<ul>
<li>regular exp kullanıcı girişlerini kontrol etmek için oldukça etkindir fakat onlarında kusuru vardır: Regular exp. zordur, formatlara fazlasıyla aşina olmadıkça reg. exp formatı oluşturmak zordur.</li>
</ul>
<p><strong>Text Karşılaştırma Nasıl Yapılır?</strong></p>
<p>Regular exp. basit kullanımı, bir string ile bir formatın karşılaştırması işlemidir. Örneğin; regular exp formatı: abc  olsun karşılaştırılan stringler ise abc,abcde,veya zabc olsun; tüm karşılaştırmalar geçerlidir çünkü hepsi formattaki ifadeyi içermektedir.özel karakterlere gerek duyulmamıştır.</p>
<p><strong>Yazının Beliritilen Bir bölümündeki Texti Karşılaştırma</strong></p>
<p>Eğer bir yazıyı ilk karakterinden itibaren karşılaştırma yamak istiyorsanız stringin ilk karakteri (^ ) olmalıdır. Örneğin, regular exp. ^cde olsun, stringiniz, cde, cdef ile eşleşir, fakat zcde ile eşleşmez.REgular exp. son karakteri ($) olursa karşılaştırılacak ifadenin sonuna bakılır. Örneğin; abc$ regular exp olursa, abc, asabc, eşleşir fakat, abcd eşleşmez.Peki hem ^hem de $ olursa ^klm$  sadece klm yazısını eşleştirebilir, aklm yada klme yazıları eşleşemez.</p>
<p>Kelimeleri ararken \b metakarakterini kullanırız, bu karakter kelime için  sınırdır. Örneğin; car\b  ancak car veya tocar ile eşleşirken carburator ile eşleşmez. Benzer şekilde \B karakterinin ise  sınırı kelimenin sonu değildir. karakteri kelimenin içinde arar, carburator eşleşirken , tocar eşleşmez.</p>
<p>Aşağıdaki tabloda karakterlerin görevleri veirlmiştir, en önemli olan ^ve $ karakterleridir.</p>
<table border="1">
<tbody>
<tr>
<td>^</td>
<td>Her stringin ilk karakteri olduğunda eşleştirmeye baş kısımdan başlar. REg expifadesinin var olmadığını kontrol eder. ^abc ***** abcdf eşleşir.</td>
</tr>
<tr>
<td>$</td>
<td>Eşleştirmede sona bakar $dif ******* redif eşleşir.</td>
</tr>
<tr>
<td>$</td>
<td>Eşleştirmede sona bakar $dif ******* redif eşleşir.</td>
</tr>
<tr>
<td>\A</td>
<td>Eşleştirme yapılacak stringin ilk karakterini belirtir.</td>
</tr>
<tr>
<td>\Z</td>
<td>Eşleştirme yapılacak stringin son karakterini belirtir.</td>
</tr>
<tr>
<td>\Z</td>
<td>Eşleştirme yapılacak stringin son karakterini belirtir.</td>
</tr>
</tbody>
</table>
<p><span style="font-family:Consolas, Monaco, monospace;">Bir çok reg exp kodu \ ile başlar.. c# da program geliştirdiğimiz için, \ işareti</span></p>
<p><span style="font-family:Consolas, Monaco, monospace;">tam olarak işlenmemiş olduğundan @ kullanmalıyız..</span></p>
<p><span style="font-family:Consolas, Monaco, monospace;">Regex.IsMatch(&#8220;pattern&#8221;,@&#8221;\Apattern\Z&#8221;)</span></p>
<p><strong>Özel Karakterleri Nasıl Karşılaştırırız?</strong></p>
<p>Regular exp içersinde özel karakterleri karşılaştırma için kullanabilirsiniz. Örneğin \t bir tab sunarken,\n yeni bir satır  sunar.Aşağıdaki tabloda hangi karakterinne iş yaptığı gösterilmiştir.</p>
<p>\a  Matches a bell (alarm). The same as \u0007.<br />
\b  In a regular expression, \b denotes a word boundary<br />
(between the \w and \W characters).<br />
\t  Matches a tab. The same as \u0009.<br />
\r  Matches a carriage return. The same as \u000D.<br />
\v  Matches a vertical tab. The same as \u000B.<br />
\f   Matches a form feed. The same as \u000C.<br />
\n  Matches a new line. The same as \u000A.<br />
\e  Matches an escape. The same as \u001B.<br />
40  Matches an ASCII character as octal, up to three digits.<br />
(40  represents a space and is provided as an example;<br />
any three digits will work.)</p>
<p>\x20 Matches an ASCII character using hexadecimal<br />
representation (exactly two digits). (\x20 is provided as an<br />
example; any two digits will work.)<br />
\cC Matches an ASCII control character—for example, \cC is<br />
Ctrl-C. (\cC is provided as an example; any character will<br />
work.)<br />
\u0020 Matches a Unicode character using hexadecimal<br />
representation (exactly four digits). (\u0020 is provided as<br />
an example; any four digits will work.)<br />
\ When followed by a character that is not recognized as an<br />
escaped character, matches that character. For example,<br />
\* represents an asterisk (rather than matching repeating<br />
characters), and \\ represents a single backslash.</p>
<p><strong>Wilcardları kullanarak text karşılaştırmada</strong></p>
<p>Tekrar eden karakterler içinde regular exp kullanabilirsiniz.* sembolü sıfır yada daha fazla karakteri eşleştirmek için kullanılır. Örneğin to*n; ton ,toon veya tn ile eşleşebilir. + sembolüde  benzer çalışır fakat  1 veya daha fazla karakteri temsil eder.to+n  karakterleri ton veya toon ile eşleşir. tn ile eşleşmez.</p>
<p>Belirtilen sayıda tekrar eden karakteri karşılaştırmak için, {n} kullanılır. burada &#8220;n&#8221;  bir digitdir. Örneğin,  to{3}n ;tooon ile eşleşir fakat ton veya tn ile  eşleşmez. Belli bir aralıkta tekrar eden karakteri eşleştirmek için  {min,max} kullanılır,  Örneğin: to{1,3}n  ton veya tooon ile eşleşirken tn veya toooon ile eşleşmez.Sadece belirtilen minumum karakter yazılıp maksimum boş bırakılırsa to{3,}n toooon ile ve daha fazla o içeren karakterlerle eşleşir.</p>
<p>Tek bir karakteri opsiyonel yapmak için ? sembolü kullanılır. örneğin &#8220;to?n&#8221; sözcüğü  &#8221;ton&#8221; veya &#8220;tn&#8221; ile eşleşirken &#8220;tooon&#8221; ile eşleşmez.Herhangi bir tek karakter için eşleştirme yapmak ise  &#8221;.&#8221; ile sağlanır. örneğin &#8220;to.n&#8221; sözcüğü &#8220;totn&#8221; veya &#8220;tozn&#8221; ile eşleşir fakat &#8220;tn&#8221; veya &#8220;ton&#8221; ile eşleşmez.</p>
<p>Bir seferde farklı karakterleri eşleştirmek için köşeli parantez kullanılır.  &#8221;de[ri]nlik&#8221; sözcüğü  &#8221;dernlik&#8221; veya &#8220;deinlik&#8221; ile eşleşirken &#8220;derinlik&#8221; ile eşleşmez.Belli bir aralıktaki karakter eşleştirmesi için ise &#8220;a[c-f]m&#8221; sözcüğü acm, adm, aem ,afm  sözcükleri ile eşleşirken agm yada abm ile eşleşemez.</p>
<p>Aşağıdaki tabloda regular exp karakterleri çoklu karşılaştırma veya belli aralıkta karakter karşılaştırma eylemler için özetlenmiştir.</p>
<p><a href="http://aktenyazilim.files.wordpress.com/2011/11/tablo3-3.png"><img class="aligncenter size-full wp-image-197" title="tablo3.3" src="http://aktenyazilim.files.wordpress.com/2011/11/tablo3-3.png" alt="" width="884" height="1083" /></a></p>
<p><a href="http://aktenyazilim.files.wordpress.com/2011/11/tbl3-3_.png"><img class="aligncenter size-full wp-image-198" title="tbl3.3_" src="http://aktenyazilim.files.wordpress.com/2011/11/tbl3-3_.png" alt="" width="892" height="1032" /></a></p>
<p>bir gurup karakteri parantez içine alarak eşleştirmeye dahil edebiliriz. örneğin</p>
<p>&#8220;foo(loo){1,3}hoo&#8221; sözcüğü</p>
<p>fooloohoo ve fooloolooloohoo ile eşleşebilir.</p>
<p>foohoo veya fooloolooloo ile eşleşemez.</p>
<p>BENZER olarak foo(to|yo)go sözcüğü</p>
<p>footogo veya fooyogo ile eşleşebilir.</p>
<p>Bir gruba isim verebilirsiniz, böylece karşılaştırılan guruptan veriyi alabilirsiniz. guruba isim vermek için şu  formatı kullanabilirsiniz:</p>
<p>?&lt;isim&gt;pattern</p>
<p>örneğin foo(?&lt;mid&gt;loo|roo)hoo sözcüğü fooloohoo ile eşleşir. Daha sonra mid gurubunun referansını almak istediğinizde size loo getirilir. aynı şekilde eğer fooroohoo ile eşleştirme yaparsanız mid gurubu roo yu içerir.</p>
<p><strong>BACKREFERENCES İLE KARŞILAŞTIRMA NASIL YAPILIR</strong></p>
<p>backreferens tekrar eden gurubun karakterlerini bulmak  için uygun bir yol sağlar..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/181/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=181&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2011/11/12/bolum3searching-modifying-and-encoding-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/11/tablo3-3.png" medium="image">
			<media:title type="html">tablo3.3</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/11/tbl3-3_.png" medium="image">
			<media:title type="html">tbl3.3_</media:title>
		</media:content>
	</item>
		<item>
		<title>bölüm2.2: Dosya ve Streamlerde Okuma Yazma işlemleri</title>
		<link>http://aktenyazilim.wordpress.com/2011/11/07/bolum2-2-dosya-ve-streamlerde-okuma-yazma-islemleri/</link>
		<comments>http://aktenyazilim.wordpress.com/2011/11/07/bolum2-2-dosya-ve-streamlerde-okuma-yazma-islemleri/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 20:55:50 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm2:Giriş / Çıkış( input/output)]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[file.create]]></category>
		<category><![CDATA[filemode.create]]></category>
		<category><![CDATA[filestream]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[isolated]]></category>
		<category><![CDATA[memorystream]]></category>
		<category><![CDATA[store]]></category>
		<category><![CDATA[streamreader]]></category>
		<category><![CDATA[streamwriter]]></category>
		<category><![CDATA[textreader]]></category>
		<category><![CDATA[textwriter]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=171</guid>
		<description><![CDATA[Okuma ve yazma işlemleri için farklı stream sınıfları kullanabilirsiniz. .net framework text ve binary dosyaları için veriyi sıkıştırmaya yada bellekte saklamaya yarayan farklı sınıflar sunmaktadır.  Bu dersimizi bitirdiğimizde; text, binary ve stringler üzerinde okuma yazma işlemlerini bellekteki streama yazmayı dosyayaya yazıldığında onu sıkıştırmayı incelemiş olacağız. Text Dosyasında Okuma Yazma İşlemleri StreamReader veya TextReader sınıflarından oluşturulacak [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=171&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Okuma ve yazma işlemleri için farklı stream sınıfları kullanabilirsiniz. .net framework text ve binary dosyaları için veriyi sıkıştırmaya yada bellekte saklamaya yarayan farklı sınıflar sunmaktadır.  Bu dersimizi bitirdiğimizde;</p>
<ul>
<li>text, binary ve stringler üzerinde okuma yazma işlemlerini</li>
<li>bellekteki streama yazmayı</li>
<li>dosyayaya yazıldığında onu sıkıştırmayı</li>
</ul>
<p>incelemiş olacağız.</p>
<h2><strong>Text Dosyasında Okuma Yazma İşlemleri</strong></h2>
<p>StreamReader veya TextReader sınıflarından oluşturulacak örnekle text dosyasından okuma işlemi yapılır. Daha sonra sınfın bir metodu çağrılarak daha fazlası veya bir kısmı okunur. Aşaıdaki örnekte gösterilmiştir.</p>
<pre> TextReader tr = File.OpenText(@"c:\windows\win.ini");
            Console.WriteLine(tr.ReadToEnd());
            tr.Close();

tabi bu örneğimizde de system.io namespaceimizi kullanıyoruz.Burada TExtREader sınıfı  kullanılırken StreamReader
da kullanılabilirdi. StreamReader kullansaydık, File.openText veya StreamReader constructorunu kullanacaktık.
aşağıdaki örnektede aynı işi yapan streamReader sınıfı örneği gösterilmiştir:

            StreamReader sr = new StreamReader(@"c:\windows\win.ini");
            string giris;
            while ((giris = sr.ReadLine()) != null)
                Console.WriteLine(giris);
            sr.Close();
Bir text dosyasını okurken readline yada readtoend metodlarını kullanıyoruz.
Bir text dosyasına ver yazmak istediğimizde ise TextWriter veya StreamWriter kullanabiliriz.
sınıfın örneğini oluşturduktan sonra, konsol ekranından istediklerimizi dosyaya yazabiliriz.
TextWriter tw =File.CreateText("output.txt");
            tw.WriteLine("merhaaba dünya");
            tw.Close();</pre>
<h2>Binary Dosyalarda okuma yazma işlemi</h2>
<pre></pre>
<div>Binary dosyaları  okuma ve yazma<br />
binary dosyaları binarywriter ve binaryreader sınıflarını kullanarak saklayabilir ve text olmayan verilere de erişebilirsiniz.</p>
<p dir="ltr">Binary dosyalara yazma işlemi:</p>
<p dir="ltr">FileStream fs = new FileStream(@&#8221;d:\data.bin&#8221;, FileMode.Create);</p>
<p>BinaryWriter bw = new BinaryWriter(fs);<br />
for (int i = 0; i &lt; 100; i++)<br />
{<br />
bw.Write(i);</p>
<p>}<br />
fs.Close();<br />
bw.Close();</p>
<p>Binary dosyalardan okuma işlemi:<br />
FileStream fs = new FileStream(@&#8221;d:\data.bin&#8221;,FileMode.Open,FileAccess.Read);<br />
BinaryReader br = new BinaryReader(fs);<br />
for (int i = 0; i &lt; 10; i++)<br />
Console.WriteLine(br.ReadInt32());<br />
br.Close();<br />
fs.Close();</p>
<p>Stringlerde okuma yazma işlemi:</p>
<p>StringBuilder sınıfını da kullanarak StringWriter ile bir streame veri yazar gibi stringlere veri yazabilir ve stringReader ile bunu okuyabiliriz.<br />
StringBuilder sb = new StringBuilder();<br />
StringWriter sw = new StringWriter(sb);<br />
sw.WriteLine(&#8220;örnek yazı&#8221;);<br />
sw.WriteLine(&#8220;deneme yazı&#8221;);<br />
sw.Close();<br />
yazılan stringi ise aşağıdaki kod yardımıyla okuyabiliriz:</p>
<p>StringReader sr = new StringReader(sb.ToString());<br />
Console.WriteLine(sr.ReadLine());<br />
Console.WriteLine(sr.ReadLine());</p>
<p>sr.Close();<br />
Bu stringwriter ve stringbuilder nerde işe yarar? string nesnesi oluşturmak yerine bu şekilde kullanabilirsiniz.</p>
<p>MemoryStream nesnesinin kullanımı:<br />
Sık kullanılan memoryStream nesnesi en nihayetinde bir dosyaya yazılacak olan veriyi geçici  olarak saklar. MemoryStreamı kullanarak bir dosyaya veri yazmak istediğinizde o dosyanın açılması verinin eklenmesi ve diske yazılması işlemlerinin tamamı için geçen zamanı ve de diğer kullanıcılarında o dosyaya erişmek istediğinde  -biz veri yazacağımız için açık olacağından- engellenmesinin önüne geçmiş oluruz. Aşağıdaki örnekte verinin geçici memoryStreame nasıl yazıldığı ve daha sonra text dosyasına verinin yazılması gösterilmektedir. Streamwriter sınıfını kullanarak kolaylıkla bir stringi memoryStreame yazabiliriz.Eger stringWriter kullanmazsak, MemoryStreama sadece byteları ve byte dizilerini okuyabilir ve yazabiliriz ve de bunu writeByte metoduyla yapabiliriz. Writebyte sadece tek bir bayt yazdırabilirken, Write metodu byte dizilerini yazdırır. Aynı şekilde readByte tek bir byte, Read metodu ise byte  dizilerini okur.</p>
<pre>            MemoryStream ms = new MemoryStream();
            StreamWriter sw = new StreamWriter(ms);
            sw.WriteLine("merhabadünya");
            sw.Flush();
            ms.WriteTo(File.Create(@"d:\orn.txt"));
            sw.Close();
            ms.Close();</pre>
<h2><strong>BufferedStream Kullanımı</strong></h2>
<p>Bufferedstream ile FileStream nesnesini kullanmaya gerek yoktur. FileStream nesnesi BufferedStream sınıfıyla  aynı mantıkta çalışır, böylece ikinci bir bufferlama katmanı gereksiz  ve verimsiz olacaktır. Gerçekte BufferedStream in kullanım amacı özel streamleri uygulamaktır dolayısıyla .net fw deki stream sınıfları zaten bufferlama yeteneğine sahiptir.</p>
<p>BufferedStream sınıfı memoryStream sınıfı gibi uygulanır. BufferedStream sınıfı da doğal olarak byte ve byte dizilerini yazmayı destekler.</p>
<h2>Sıkıştırılmış Streamler</h2>
<p>.net Fwda sıkıştırılmış streamler kullanarak daha az yer kaplayan uygulamalar yazabiliriz. Genel olarak text dosyaları, yüksek oranda sıkıştırılabilirler, binary dosyaları ise çok az oranda sıkıştırılabilirler çünkü binary dosyaları  zaten sıkışmış olarak kullanılır. MemoryStream sınıfı gibi, GZipStream sınıfını kullanarak sadece byteları ve byte dizilerini okuyabilir ve yazabilirsiniz. Bu yüzden eğer ki byte türünün haricinde veri saklamak istiyorsanız, Streamwriter streamReader kullanarak stringleri sıkıştırılmış streama yazabilir okuyabilirsiniz.</p>
<p>gzipStream sınıfın kullanımı aşağıda gösterilmiştir:</p>
<pre>            GZipStream gzout = new GZipStream(File.Create(@"d:\ornek.zip"),CompressionMode.Compress);
            StreamWriter sw = new StreamWriter(gzout);
            for (int i = 0; i &lt; 1000; i++)
                sw.Write("merhaba");
            sw.Close();
            gzout.Close();
okumak için ise:
            GZipStream gzipIn = new GZipStream(File.OpenRead(@"d:\ornek.zip"),CompressionMode.Decompress);
            StreamReader sr = new StreamReader(gzipIn);
            Console.WriteLine(sr.ReadToEnd());
            sr.Close();
            gzipIn.Close();</pre>
<p>zip haliyle dosyamız 201 byte yer tutarken file stream nesnesiyle yapmış olsaydık 10kb civarında bellekte yer kaplayacaktı.</p>
<h2><strong>Isolated Storage Kullanımı</strong></h2>
<p>Isolated storage .net framework tarafından yönetilen özel dosya sistemidir.Standart dosya sistemine benzer.Dosyaya yazma ve dosyadan okuma işlemleri için bildiğimiz teknikleri(streamreader streamwriter gibi) kullanabiliriz.Buna rağmen isolated storage e yazarken direk dosya sistemine yazarkenden daha az imtiyaz gerekir ki buda daha az ayrıcalığın uygulanması demektir.</p>
<p>Ek olarak isolated storage  , user domain ve assemblye göre kişiselleşebilir.Dosya sistemindeki ek korumaları sağlamaz, isolated storage yüksek güvenlik sağlamaz, yüksek güvenlikli kodla korunmaz, unmanaged kod kullanır daha da doğrusu bilgisayardaki kullanıcılara güvenir.</p>
<p><strong>Isolated Storage Tipleri</strong></p>
<p>Isolated storage içindeki bir dosyaya erişirken onu yaratan kullanıcı daima kısıtlanmıştır. İzole edilen kullanıcıya ek olarak, özel bir assemblyin de isolated storage e erişimi genellikle kısıtlanmıştır. diğer bir değişle; AssemblyA tarafından yaratılan isolated storage e AssemblyB  nin erişimi kısıtlanmıştır.</p>
<p>Kullanıcının ve assembly in isolated storage na ek olarak; sizde assemblynizi izole edebilirsiniz: application domain yoluyla.</p>
<p><strong>Isolated Storage Sınıflarıyla Çalışmak:</strong></p>
<p>System.IO.isolatedStorage name spacei üç adet sınıf sunar:</p>
<p><strong>IsolatedStorageFile:</strong></p>
<p>Isolated storage ait saklama alanlarının yönetimini sağlar. münferit Saklama alanları ayrık isolated storage sistemleridir, bunlar 1 dosya sisteminin içersindedir.</p>
<p><strong>IsolatedStoreFileStream:</strong></p>
<p>Saklama alanlarındaki isolated storage dosyalarına okuma/yazma erişimi sağlar. Isolated Storage dosyaları geleneksel dosya sisteminde nasıl dosya direkt saklanıyorsa aynı şekilde davranır; buna rağmen isolated storage saklama alanındadır.</p>
<p><strong>IsolatedStorageException:</strong></p>
<p>Isolated Storage e ait exceptionların olduğu sınıfdır.</p>
<p>IsolatedStorageFile münferit saklama alanlarına erişim için, IsolatedStorageFileStream bu saklama alanlarındaki münferit dosyaları yönetim için kullanılır.</p>
<p><strong>Isolated Storage e Nasıl Erişecez?</strong></p>
<p>ISolated Storage  ile çalışırken aynı standart dosya sistemiyle çalışır gibi çalışırız. Öncelikle aşağıdaki farklılıkları yerine geitrmeliyiz:</p>
<p>*System.IO.IsolatedStorage namespacei ve System.IO namespacei ekleriz.</p>
<p>*Isolation tipini berlitmek için ISolatedStorageFile nesnesi declare edilir bu seçenek size kalmış</p>
<p>*Dosya sistemi nesneleri inşa edilir: streamWriters,StreamREaders ve diğer System.IO nesneleri, ki bunlar System.IO.IsolatedStorage  içersindedir.</p>
<p>Aşağıdaki kodda assembly tarafından izole edilen birkullanıcı alanı alınıyor, myfile.txt adında dosya yaratılıyor, isolated storage dosyası kullanmak için yeni bir streamwriter nesnesi yaratılıyor  tek satır yazı dosyaya yazılıyor ve isolated storage dosyası kapatılıyor. Application domain tarafından izole edilmiş alanı kullanmak için basit bir değişiklik gereklidir: IsolatedStorageFile.GetUserStoreForAssembly metodu yerine IsolatedStorageFile.GetUserStoreForDomain metodu çağrılır.</p>
<blockquote>
<pre>IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForAssembly();
            IsolatedStorageFileStream isoFile = new IsolatedStorageFileStream("myfile.txt", FileMode.Create, isoStore);
            StreamWriter sw = new StreamWriter(isoFile);
            sw.WriteLine("buyazı isolated store dosyasına yazılmıştır");
            sw.Close();
            IsolatedStorageFile isoStorageoku = IsolatedStorageFile.GetUserStoreForAssembly();
            IsolatedStorageFileStream isoDosya = new IsolatedStorageFileStream("myfile.txt",FileMode.Open,isoStore);
            StreamReader sr = new StreamReader(isoDosya);
            string dosyaicerik = sr.ReadLine();
            Console.WriteLine(dosyaicerik);
            sr.Close();
Bu myfile.txt dosyası nerde acaba?
win7de kullanıcıadı&gt;appdata&gt;local&gt;isolatedStorage bu yoldan bulabilirsiniz.</pre>
</blockquote>
<p>bölümle ilgili uygulamalar aşağıdaki linklerde:</p>
<p>https://docs.google.com/open?id=0B3k7e25ssXt-ZDAzMTNiYzQtNDZhNi00YmQwLTk0YzgtZTgyNDkyZGJkOGZl</p>
<p>&nbsp;</p>
<p>https://docs.google.com/open?id=0B3k7e25ssXt-NDJlZWQyZTUtN2I1Zi00OWZmLThiN2YtNTVmN2M2NDU4MDQ5</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=171&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2011/11/07/bolum2-2-dosya-ve-streamlerde-okuma-yazma-islemleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>
	</item>
		<item>
		<title>Bölüm2: 1 GİRİŞ/ÇIKIŞ</title>
		<link>http://aktenyazilim.wordpress.com/2011/11/03/bolum2-giriscikis/</link>
		<comments>http://aktenyazilim.wordpress.com/2011/11/03/bolum2-giriscikis/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 21:59:35 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm2:Giriş / Çıkış( input/output)]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[dile]]></category>
		<category><![CDATA[DirectoryInfo]]></category>
		<category><![CDATA[FileInfo]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[throw]]></category>
		<category><![CDATA[watcher]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=162</guid>
		<description><![CDATA[Uygulamalarımız sıklıkla verileri bir yere saklamak yada diğer uygulamalarla iletişim kurmak ister. Bunları yaparkende illaki ve dosya sistemine ulaşmalı ve veri okuyup yazabilmelidir. Bu Bölümde bunları göreceğiz. Bölüm2.1 Dosya Sistemiyle Çalışmak: .Net framework içerdiği bir çok sınıf ile temel dosya yönetimi görevlerinden; sürücüleri aramayı, dosya ve klasörleri yönetmeyi ve dosya sistemindeki değişikliklere cevap vermeyi yerine [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=162&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Uygulamalarımız sıklıkla verileri bir yere saklamak yada diğer uygulamalarla iletişim kurmak ister. Bunları yaparkende illaki ve dosya sistemine ulaşmalı ve veri okuyup yazabilmelidir. Bu Bölümde bunları göreceğiz.</p>
<h2><span style="color:#ff0000;">Bölüm2.1 Dosya Sistemiyle Çalışmak:</span></h2>
<p>.Net framework içerdiği bir çok sınıf ile temel dosya yönetimi görevlerinden; sürücüleri aramayı, dosya ve klasörleri yönetmeyi ve dosya sistemindeki değişikliklere cevap vermeyi yerine getirir. Bu derste dosta yönetimi sınıflarındançok kullanılanları açıklayacaz.</p>
<p>Bu ders bittiğinde:</p>
<ul>
<li>bilgisayara bağlı olan sürücülerin listesini oluşturma</li>
<li>dosya ve klasörleri kopyalama, taşıma, araştırma ve silme</li>
<li>dosya veya klasör değişimlerine cevap verme</li>
</ul>
<h3><strong> Sürücüleri Listelemek</strong></h3>
<p>Bilgisayara bağlı olan tüm sürücüleri listelemek için System.IO  da bulunan statik DriveInfo.GetDrives metodu kullanarak DriveInfo nesneleri alınır.Örneğin aşağıdaki kod bilgisayara bağlı sürücüleri görüntüler.</p>
<pre>foreach (DriveInfo di in DriveInfo.GetDrives())
                Console.WriteLine("{0}:{1}",di.Name.ToString(),di.DriveType.ToString());</pre>
<p><a href="http://aktenyazilim.files.wordpress.com/2011/11/adsc4b1z.png"><img class="aligncenter size-full wp-image-163" title="Adsız" src="http://aktenyazilim.files.wordpress.com/2011/11/adsc4b1z.png" alt="" width="387" height="113" /></a></p>
<p>DriveInfo Sınıfı aşağıdaki özellikleri sunar:</p>
<ul>
<li>AvailableFreeSpace: sürücü üzerinde kullanılabilir boş alanı gösterir.</li>
<li>DriveFormat: Dosya sisteminin ismini verir. ntfs fat gibi</li>
<li>DriveType: Sürücünün tipini gösterir.</li>
<li>IsReady: Sürücünün hazır olup olmadığını kontrol eder.</li>
<li>Name: Sürücünün ismini verir.</li>
<li>RootDirectory: Sürücünün ana dizinini verir.</li>
<li>TotalFreeSpace:Sürücü üzerindeki toplam kullanılabilir boş  alanı verir.</li>
<li>TotalSize: sürücünün toplam depolama alanını verir.</li>
<li>VolumeLabel:Sürücünün etiketini okuma/yazma işlemini yapar.</li>
</ul>
<p><strong>Dosyaları ve Klasörleri Yönetmek:</strong></p>
<p>.net framework&#8217;un sağladığı sınıflar ile klasör ve dosyaları araştırma, yeni dosya yaratma, ve dosyaları yönetme işlemleri yapılır.</p>
<p>Bu sınıfların nasıl kullanılacağı aşağıda açıklanmıştır.</p>
<p><strong>Dosyaları araştırma:</strong></p>
<p>DirectoryInfo sınıfını kullanarak dosya ve klasörleri araştırabiliriz. İlk önce DirectoryInfo sınıfından araştırılacak olan klasörün ismi bildirilerek bir örnek  oluşturuyoruz(dirInfo). Daha sonra DirectoryInfo.GetDirectories veya DirectoryInfo.GetFiles metodlarını kullanarak klasörleri ve dosyaları ilgili değişkenlere aktararak görebiliriz.</p>
<pre>DirectoryInfo dir = new DirectoryInfo(@"c:\windows");
            Console.WriteLine("klasörler:");
            foreach (DirectoryInfo dirInfo in dir.GetDirectories())
                Console.WriteLine(dirInfo.Name);
            Console.WriteLine("\nDosyalar:");
            foreach (FileInfo fiInfo in dir.GetFiles())
                Console.WriteLine(fiInfo.Name);</pre>
<h3><strong>Klasörleri Oluşturma:</strong></h3>
<p>Klasörleri yaratmak için DirectoryInfo sınıfından yine bir örnek yaratıyoruz ve daha sonra DirectoryInfo.Create metodunu çağırıyoruz.var olan bir klasörün olup olmadığını DirectoryInfo.Exists özelliğini kullanarak öğrenmemiz gerekir. aşağıdaki örnekte klasörün olup olmadığı kontrol ediliyor eğer ki klasör mevcutsa CLR aynı klasörü oluşturma isteğimiz için herhangi bir &#8220;istisnai durum&#8221; oluşturmaz.</p>
<pre>  DirectoryInfo dr = new DirectoryInfo(@"c:\deleteme");
            if (dr.Exists)
                Console.WriteLine("bu klasör zaten mevcut");
            else
                dr.Create();</pre>
<h3><strong>Dosyaları kopyalama,taşıma,silme ve yaratma:</strong></h3>
<p>Dosyalar üzerinde bu işlemleri yapabilmek için static File.create, File.createText,File.copy, File.Move, File.Delete metodları kullanılır. Aşağıdaki örnekte bir dosya yaratıyor, onu kopyalıyor ve daha sonra ismini değiştirerek taşıyoruz.</p>
<pre>File.CreateText(@"c:\deleteme\benim.txt");
File.Copy(@"c:\deleteme\benim.txt", @"c:\deleteme\kopya.txt");
File.Move(@"c:\deleteme\benim.txt", @"d:\tasima.txt");
öneri olarak her satırı ayrı ayrı çalıştırıp klasörlerin içeriğini 
ve dosyaların durumlarını görmeniz.
alternatif olarak FileInfo  sınıfının sunduğu create,createtext, 
copyto,moveTo ve delete metodlarını kullanabilirsiniz.
 FileInfo fil = new FileInfo(@"c:\deleteme\benimtextdosyam.txt");

            fil.CreateText();
            fil.CopyTo(@"d:\senindosyan.txt");
            FileInfo fil2 = new FileInfo(@"d:\senindosyan.txt");
            fil2.MoveTo(@"c:\deleteme\senindosyan.txt");</pre>
<h3><strong>Dosya sistemini görüntüleme:</strong></h3>
<p>FileSystemWatcher sınıfı ile dosya güncellemeleri, yeni dosyalar, adı değişen dosyalar ve dosya sisteminde meydana gelen diğer değişikliklere cevap verir. ilkönce FileSystemWatcher örneği görüntülenecek olan yolun adreside girilerek birlikte yaratılır.FileSystemWatcher özellikleri ayarlanır. daha sonra olay yakalayıcısı için metod eklenir. En sonunda fileSystemWatcher.enableRaisingEvent özelliği true yapılır.</p>
<pre> FileSystemWatcher fsw = new FileSystemWatcher(Environment.GetEnvironmentVariable("userprofile"));
            fsw.IncludeSubdirectories = true;
            fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
            fsw.Changed += new FileSystemEventHandler(fsw_Changed);
            fsw.EnableRaisingEvents = true;</pre>
<p><strong>FilesystemWatcher olayını ele alalım:</strong></p>
<p>bizim belirttiğmiz yerdeki dosyalarda  herhangi bir değişiklik olduğunda CLR FilSystemWatcher.Changed olayını ele alır bunu tüm değişimlerde yapar, silme yaratma değiştirme gibi&#8230; Önceki kod örneğinde eklenen fsw_changed metodu  changed olayını yakalar aşağıdaki kodda da bunu nasıl yaptığı görülüyor.</p>
<pre>  static void fsw_Changed(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine(e.ChangeType + ": " + e.FullPath);
        }</pre>
<p>eğer dosya yenide adlandırılıdığında buna cevap vermek istersek başka bir olay yakalayıcı yaratıp, RenamedEventArgs,  FileSystemEventArgs nin yerine kullanılır.</p>
<pre>static void fsw_Renamed(object sender, RenamedEventArgs e)
{
// Write the path of a changed file to the console
Console.WriteLine(e.ChangeType + " from " + e.OldFullPath +
" to " + e.Name);
}
<strong>FileSystemWatcher özelliklerinin ayarları:</strong>
<strong>Filesystemwatcherın</strong> aşağıdaki özelliklerini değiştirerek, 
CLR nin hangi tipte istisnai durum fırlatacağı ayarlanabilir
<span style="color:#ff9900;"><strong>filter:</strong></span>
<span style="color:#000000;"><strong>Dosya ismini olayları tetikler. tüm dosyalar arasındaki değişim için</strong></span>
<span style="color:#000000;"><strong>filter property kullanılır ve boş string "" yada *.* kullanılır. </strong></span>
<span style="color:#000000;"><strong>bir özel dosyayı incelemek istiyorsak:</strong></span>
<span style="color:#000000;"><strong>filter özelliğine filename eklenmelidir. mydoc.txt deki değişiklikleri incelemek istersek</strong></span>
<span style="color:#000000;"><strong>filter özelliği "mydoc.txt" yapılır. </strong></span>
<span style="color:#ff9900;"><strong>Notify Filter:</strong></span>
<strong>filename</strong>
<strong>directoryname</strong>
<strong>attributes</strong>
<strong>size</strong>
<strong>lastwrite</strong>
<strong>lastaccess</strong>
<strong>creationTime</strong>
<strong>security</strong>
<strong> </strong>
<span style="color:#ff9900;"><strong>.Path</strong></span>
<span style="color:#000000;"><strong>klasörü görüntülemek için kullanılır. filesystemwatcherın construtorında </strong></span>
<span style="color:#000000;"><strong>tanımlarız.</strong></span>

Bu bölümle ilgili iki adet uygulama ekte verilmiştir. başarılar

https://docs.google.com/open?id=0B3k7e25ssXt-NDQ2MmQ1OTItNmRjNi00ZjZkLWFmOGYtMTBjYjMxNTVjYjUy

https://docs.google.com/open?id=0B3k7e25ssXt-NmI0OTYwMTktZTMzNy00NjdmLThiOTktYzA3OTkyNjZlMDJj</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/162/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=162&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2011/11/03/bolum2-giriscikis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/11/adsc4b1z.png" medium="image">
			<media:title type="html">Adsız</media:title>
		</media:content>
	</item>
		<item>
		<title>bölüm 1.4: Tipler arası dönüşüm</title>
		<link>http://aktenyazilim.wordpress.com/2011/09/26/bolum-1-4-tipler-arasi-donusum/</link>
		<comments>http://aktenyazilim.wordpress.com/2011/09/26/bolum-1-4-tipler-arasi-donusum/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 18:18:47 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm1:Framework&#039;un Temelleri]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=148</guid>
		<description><![CDATA[Merhabalar, 1. bölümün son konusu tiplerin birbirine dönüşümünü inceleyecez. Sıklıkla 2 farklı tipin birbirine dönüşümüne ihtiyaç duyarız. Örneğin, parametresi int türünden büyük yada double dan küçük olan bir fonksiyona gönderilen değeri algılamamız gerekir. c# da dönüşüm c# da duyarlılık azalmasın diye gizli tür dönüşümüne izin verilmez Sadece hedef tip  kaynak tipin tüm degerleriyle uygunsa gizli [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=148&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Merhabalar, 1. bölümün son konusu tiplerin birbirine dönüşümünü inceleyecez.</p>
<p>Sıklıkla 2 farklı tipin birbirine dönüşümüne ihtiyaç duyarız. Örneğin, parametresi int türünden büyük yada double dan küçük olan bir fonksiyona gönderilen değeri algılamamız gerekir.</p>
<h2><strong><span style="color:#ff6600;">c# da dönüşüm</span></strong></h2>
<p><span style="color:#474747;"><span style="color:#ff6600;">c# da duyarlılık azalmasın diye gizli tür dönüşümüne izin verilmez Sadece hedef tip  kaynak tipin tüm degerleriyle uygunsa gizli tür dönüşümüne izin verilir. buna genişleyen dönüşüm denmekte ve aşağıdaki gibi uygulanmaktadır:</span></span></p>
<pre>int i = 1;
double d = 1.0001;
d = i; // Conversion allowed.
Eğer aralık yada duyarlık konusunda, kaynak tip hedef tipi aşıyorsa bu işlem daralan dönüşüm olarak adlandırılır.
açık bir şekilde bu işlem yapılmalıdır.burda olayın özü şu, elimizdeki türü başka bir türe dönüştüreceğimizde,
türlerin kapasıtelerı bırbırne uygunsa sorun yok gızlı donusum yapılabılır,
<a href="http://aktenyazilim.files.wordpress.com/2011/09/bolum1-4-1.png"><img class="alignnone size-full wp-image-151" title="bolum1.4-1" src="http://aktenyazilim.files.wordpress.com/2011/09/bolum1-4-1.png" alt="" width="591" height="670" /></a>
Eğer kaynak türün değer aralıgı hedef turun deger aralıgını asıyorsa daraltılmıs donusum hatalı sonuc verebılır.
eger tıpler arası donusum tanımlanmamıssa derleme zamanında hata alabılırsınız..</pre>
<h2><strong>BOXING VE UNBOXING NEDIR?</strong></h2>
<p>Boxıng ; value turden bır verıyı referans ture donusturme ıslemıdır. uboxıng ıse referas turden verıyı value ture donusturme ıslemıdır. asagıdakı ornekte value tur olan ınt turu referans tur  ola object turune donusturuluyor.</p>
<p>int a=345;</p>
<p>object o =(object) a;</p>
<p>uboxıng ıslemıde yukardakının  tersıdır.</p>
<p>object o =5432;</p>
<p>int b =(int)o;</p>
<h2><strong>Boxing Tipler:</strong></h2>
<p>Boxing ve unboxınng ıslemı ek yuk getırır. Bunun ıcın olabıldıgınce tekrarlanan görevlerden kaçınılmalıdır. Boxıng;   structure veya System.Object de kalıtımla ToString gıbı bir deger tipi için saal metodlar çağrıldıgında ortaya cıkar.Gereksiz boxınglerde kacınmak ıcın asagıdakı adımlar ızlenır:</p>
<ul>
<li>Bır prosedure bırden fazla degısık value tıpı uygulanabılır olmalı. object parametresı alan bır prosedur yerıne  bırden fazla ve asırı yuklenmıs prosedur yaratmak daha ıyıdır.</li>
<li>object tıp elemanlarıyla kodlama yapmak yerıne generıclerı kullanabılırsınız</li>
<li>Tostrıng, equals, ve gethash sanal uyelerını structure tanımlarken aşırı yukleyebılırsınız.</li>
</ul>
<h2><strong>Özel Tiplerde dönüşüm</strong></h2>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/148/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=148&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2011/09/26/bolum-1-4-tipler-arasi-donusum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/09/bolum1-4-1.png" medium="image">
			<media:title type="html">bolum1.4-1</media:title>
		</media:content>
	</item>
		<item>
		<title>bölüm1.3:Sınıfların oluşturulması</title>
		<link>http://aktenyazilim.wordpress.com/2011/08/28/bolum1-3siniflarin-olusturulmasi-2/</link>
		<comments>http://aktenyazilim.wordpress.com/2011/08/28/bolum1-3siniflarin-olusturulmasi-2/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 07:30:33 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm1:Framework&#039;un Temelleri]]></category>
		<category><![CDATA[70-536]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[delegate]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=124</guid>
		<description><![CDATA[Nesne yönelimli dillerde, çalışmanın büyük kısmı nesnelerle yapılır.Basit uygulamalar en az bir veya daha fazla özel sınıf bunların herbirinin özellikleri  ve metodları nesnelerin görevlerini yerine getirmesi için kullanılır.Bu dersimizde özel sınıfların yaratılmasını konuşacaz. Bu ders bittiğinde aşağıdakileri yapabilir durumda olacaksınız: Inheritance(Kalıtım) kavramını açıklar ve kullanır. Interface(Arayüz)kavramını açıklar ve kullanır Parçalı sınıflar kavramını açıklar ve kullanır [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=124&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nesne yönelimli dillerde, çalışmanın büyük kısmı nesnelerle yapılır.Basit uygulamalar en az bir veya daha fazla özel sınıf bunların herbirinin özellikleri  ve metodları nesnelerin görevlerini yerine getirmesi için kullanılır.Bu dersimizde özel sınıfların yaratılmasını konuşacaz. Bu ders bittiğinde aşağıdakileri yapabilir durumda olacaksınız:</p>
<ul>
<li>Inheritance(Kalıtım) kavramını açıklar ve kullanır.</li>
<li>Interface(Arayüz)kavramını açıklar ve kullanır</li>
<li>Parçalı sınıflar kavramını açıklar ve kullanır</li>
<li>bir generic tipi yaratır ve built-in generic tipleri kullanır.</li>
<li>Event(olay)lara cevap verir</li>
<li>MEtod ve assembliye nitelik ekler</li>
<li>Bir tipi bir sınııf kütüphanesinden diğer tipe dönüştürür.</li>
</ul>
<h2>Inheritance(Kalıtım) Nedir?</h2>
<p>.Net framework binlerce sınıf içerir ve her sınıfın farklı metodları ve özellikleri vardır..net Framework sınıfların bu   özelliklerini ve üyelerini sürekli olarak dahil edemez.Örneğin her sınıfta bulunan  ToString metodu her sınıfta aynı işi yapar:sınıf içerisinde örnek değer stringe çevrilir.Benzer şekilde birçok sınıf ın desteskelediği belli operatorler örneğin karşılaştırma operatorü iki örneği karşılaştırır. Bu tutarlılık inheritance (kalıtım ) ve interface (arayüz) den dolayı mümkündür.Inheritance(kalıtım)ı kullanarak harici bir sınıftan yeni bir tane elde edilebilir. Örneğin 6.bölümde grafik konusunu işlerken göreceğimiz;Bitmap sınıfı Image sınıfından kalıtımla elde edilmiş olup yeni fonksiyonlarda eklenmiştir.Bu yüzden image sınıfının örneği yerine bitmap sınıfının örneğini kullanabiliriz .Buna rağmen Bitmap sınıfı ek metodlar sağladığı için resimler üzerinde  daha fazla işlem yapabiliriz. Şimdi basit bi şekilde System.ApplicationException  sınıfından kalıtımla özel bir sınıf oluşturalım:</p>
<blockquote><p>class TureyenException:System.ApplicationException { public  override string Mesaj { get { return &#8220;Bu uygulama hata verdi.&#8221;; } } }</p></blockquote>
<p>Bu yeni exception(istisnai durum) u ortaya çıkmalı ve yakalamalıyız çünkü yeni sınıfımız  &#8221;tureyenexception&#8221; temel sınıf gibi davranacaktır.</p>
<blockquote><p>try { throw new TureyenException(); } catch (TureyenException ex) { console.WriteLine(&#8220;Kaynak: {0}, Hata:{1}&#8221;, ex.Source,  ex.Message); }</p></blockquote>
<p>Dikkat edildiği üzere &#8220;türeyenException&#8221; sınıfımız sadece throw/catch davranışlarını desteklemiyor aynı zamanda System.ApplicationException dan bir Source üyesinide almıştır.</p>
<p>Inheritance&#8217;ın diğer bir faydası da türeyen sınıfların birbirleriyle değiştirilebilmesidir bunu da polymophism (çok biçimlilik)olarak adlandırıyoruz.Örneğin System.Drawing.Brush temel sınıfından kalıtımla gelen 5 sınıfı ele alalım: HatchBrush, LinearGradientBrush, PathGradientBrush, SolidBrush ve TextureBrush. Graphics.DrawRectangle metodu parametre gibi bir Brush nesnesine ihtiyaç duyar ancak asla temel Brush sınıfını Graphics.DrawRectangle a gönderemeyiz. Bunun yerine sınıftan türemiş nesneyi parametre olarak gönderebiliriz. Çünkü graphics.drawrectangle metodu brush sınıfından türeyenlerin her birini kabul eder.Basit olarak; eğer Brush sınıfından türeyen özel bir sınıf  yaratıyorsak  Graphics.DrawRectangle a gönderebiliriz.</p>
<h2><strong>Interface (Arayüz) Nedir?</strong></h2>
<p>Interface&#8217;ler sözleşme olarak da bilinirler, interface tüm sınıfların ortak üyelerini tanımlayan bir ortam sağlamalıdır.Örneğin IComparable arayüzü CompareTo metodunu tanımlar böylece iki örneğin bir sınıfla eşitlik durumunu karşılaştırabiliriz.Tüm sınıflar eşitlik durumunu karşılaştırmak için uygulanabilir.</p>
<p>IDisposable arayüzü tek metod sağlar,o da Dispose metodudur.Görevi kaynak kodumuzda ki kendi sınıflarımızdan bir örnek yarattığımızda kullanılan kaynakları serbest bırakır.IDisposable arayüzünü visual studio ile sınıfımıza dahil edebilmek için aşağıdaki adımlar izlenir:</p>
<ol>
<li>önce sınıf tanımı                                                                                                                                                                                                    class BigClass{}</li>
<li>Arayüzün tanımlanması                                                                                                                                                                                    class BigClass:IDisposable{}</li>
<li> c# kullandığımız için; sağ click Interface tanımı üzerine, Implement Interface e tıklıyoruz ve Implement interface tekrar tıklıyoruz:<a href="http://aktenyazilim.files.wordpress.com/2011/08/res1-3-1.png"><img class="alignnone size-full wp-image-135" title="res1.3.1" src="http://aktenyazilim.files.wordpress.com/2011/08/res1-3-1.png" alt="" width="635" height="131" /></a></li>
<li>interfacein her metodu için kod yazılır.Bu örnekte tahsis edilen kaynaklar Dispose metoduna yazılacak kodla serbest bırakılacaktır.</li>
</ol>
<p>Aşağıdaki tabloda sık kullanılan arayüzler gösterilmekedir.</p>
<p><a href="http://aktenyazilim.files.wordpress.com/2011/08/tbl1-6.png"><img class="alignnone size-full wp-image-136" title="tbl1.6" src="http://aktenyazilim.files.wordpress.com/2011/08/tbl1-6.png" alt="" width="640" height="414" /></a></p>
<p>Kendi arayüzlerinizi de yaratabilirsiniz. Bir çok özel sınıfa ihtiyacınız varsa ve basit ve birbiriyle değiştirerek kullanmak istiyorsanız kendi interface inizi yazmak faydalıdır.Örneğin aşağıdaki kodda üç üyeyi tanımlayan bir interface görüyoruz.</p>
<blockquote>
<pre>interface IMessage
    {
        bool Send();
        string Message { get; set; }
        string Adress { get; set; }

    }</pre>
</blockquote>
<pre>Bu interfacei herhangi bir sınıfa dahil edip implement interface e tıklarsak üyelere ait metodlar 
otomatik olarak eklenecektir.</pre>
<blockquote>
<pre>class Email : IMessage
    {

        #region IMessage Members

        public bool Send()
        {
            throw new NotImplementedException();
        }

        public string Message
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string Adress
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        #endregion
    }</pre>
</blockquote>
<pre>Eğer özel bir sınıf yaratır ve daha sonra aynı üyelerle çoklu sınıf olması faydalı olacağına karar verir
seniz;visual studio bir özel sınıfın interfacei açmak için kısayol sunar</pre>
<ul>
<li>Sınıfa sağ tıklanır.</li>
<li>REfactor e tıklanır ve sonra Extract Interface tıklanır.</li>
<li>Interface ismi belirtilir,interfaceden public üyeler seçilir ve ok tıklanır.</li>
</ul>
<p>Son olarak sınıflara çoklu interface dahil  edilebilir.Örneğin bir sınıf hem IComparable hemde IDisposable interfacelerini alabilir.</p>
<h2><strong>Kısmi(Partial) Sınıflar Nedir?</strong></h2>
<p>Partial Sınıflar bir sınıfın tanımlamasını birçok kaynak dosyasına ayırmanıza izin verir. Bu yaklaşımın faydası ise sınıfı tanımlarken detayları gizleyerek, geliştiricilerin önemli kısımlara daha fazla odaklanmasını sağlar.</p>
<p>Windows Form sınıfları built-in kısmi sınıflara örnektir.Visual studio 2003 ve öncesinde form sınıfları form tasarımcısı  tarafından üretilen kodları içerirdi.Şimdi ise bu kodlar form.Designer.cs adında partial sınıfında saklanmaktadır.</p>
<h2><strong>&#8220;Generic&#8221;ler Nedir?</strong></h2>
<p>Genericler CLR tip sisteminin bir parçasıdır ve amacı bazı detayları belirtilmemiş tipler tanımlamamıza izin vermesidir. Tiplerin kesin parametrelerle veya üyelerle kesin olarak belirtmek yerine generic sınıf kullanarak o tipleri belirleyebilirsiniz.</p>
<p>.Net framework System.Collections.Generic  namespace içersinde farklı  generic sınıflar içerir, Dictionary, Queue, SortedDictionary, ve SortedList. Bu sınıflar generic olmayan System.Collections un mukabili gibi çalışır fakat bunlar tip güvenliği ve performansı arttırır.</p>
<h3><strong>Neden Genericleri Kullanırız?</strong></h3>
<p>Genericler Nesne sınıfı üzerinde iki avantaj sağlar:</p>
<p><strong>Çalışma zamanı hatalarını azaltır:</strong> Derleyici object sınıfından ve kendi yaptığınız tip dönüşümleri sırasında tip hatalarını yakalamaz.Örneğin string tipteki değişkeninizi objecte ve daha sonra  bu object değişkeni integere dönüştürmek isterseniz derleyici bu hatayı yakalayamaz.Bunun yerine uygulamanızda exception (istisnai durum) meydana gelir. Genericleri kullanarak program çalışmadan önce bu tarz bug(hata) ları derleyicinin yakalaması sağlanır.</p>
<p><strong>Performansı arttırır: </strong>Tip dönüşümü boxing ve unboxing gerektirir ki işlemci zamanını harcar ve performansı düşürür. Generikleri kullandığımızda tip dönüşümüne yada boxinge gerek kalmayacağı için performans artacaktır.</p>
<h2><strong>Generic Tipler Nasıl Oluşturulur</strong></h2>
<p>Öncelikle aşağıdaki sınıfı inceleyelim. Obj ve Gen Sınıfları tamamen aynı görevi yerine getirir fakat obj Object sınıfı kullanarak her tipi saklarken Gen  generic kullanmıştır:</p>
<blockquote><p>Class Obj</p>
<p>{</p>
<p>public Object t;</p>
<p>public Object u;</p>
<p>public Obj(Object _t,Object _u)</p>
<p>{</p>
<p>t=_t;</p>
<p>u=_u;</p>
<p>}</p>
<p>}</p>
<p>class Gen &lt;T,U&gt;</p>
<p>{</p>
<p>public T t;</p>
<p>public U u;</p>
<p>public Gen(T _t,U _u)</p>
<p>{</p>
<p>t=_t;</p>
<p>u=_u;</p>
<p>}</p>
<p>}</p></blockquote>
<p>Görüldüğü üzere obj sınıfı Object tipinden iki üye içeriyor.Gen sınfı ise T ve U tiplerinde iki üyesi bulunuyor. Kodun etkileyici yanı T ve U yu tip olarak belirtmesidir.Buna bağlı olarak Gen sınıfında kullanılan kodun gücü ,  T ve U string, int,  özel bir sınıf ve bunların kombinasyonu olabilmesidir.</p>
<p>Generic sınıfları yaratırken önemli bir sınırımız bulunmakta. temel olarak generic kod yazdığınızda object sınıfının yapabilecekleri kadardır. Bu yüzden ToString ve GetHashCode metodlarını kendi sınıfnızdan çağırabilirsiniz fakat + veya &gt; operatörlerini kullanamazsınız.</p>
<h2><strong>Generic  Tiplerin  Kullanımı</strong></h2>
<p>Bir generik tipi kullanırken, kullanılan generiklerin her biri için tipleri belirtmelisiniz. Aşağıda ki uygulamada Gen ve Obj sınıfları kullanılmıştır:</p>
<blockquote><p>//obj sınıfı kullanılarak iki string eklendi</p>
<p>Obj oa = new Obj(&#8220;hello&#8221;, &#8220;world&#8221;);</p>
<p>console.writeline((string)oa.t +(string)oa.u);</p>
<p>//Gen sınıfı kullanılarak iki string eklendi</p>
<p>Gen&lt;string,string&gt; ga =new Gen&lt;string, string&gt;(&#8220;hello&#8221;,&#8221;world&#8221;);</p>
<p>console.writeline(ga.t+ ga.u);</p>
<pre>// Add a double and an int using the Obj class
Obj ob = new Obj(10.125, 2005);
Console.WriteLine((double)ob.t + (int)ob.u);
// Add a double and an int using the Gen class
Gen&lt;double, int&gt; gb = new Gen&lt;double, int&gt;(10.125, 2005);
Console.WriteLine(gb.t + gb.u);</pre>
</blockquote>
<pre>Bu konsol uygulamasını çalıştırdığımızda obj ve gen sınıfları benzer sonuçlar doğuracaktır.Ancak gen sınıfı 
daha hızlı çalışacaktır çünkü obj sınıfındaki gibi boxing ve unboxing işlemleri yoktur.Aynı zamanda geliştiriciler
Gen sınıfını daha kolay kullanacaktır. Öncelikle Object sınıfından tip dönüşüm işlemini manuel  yapmak gibi bir durum
olmayacak. İkinci olarak ise çalışma zamanında ortaya çıkacak hataları derleme zamanında ortaya çıkaracak.
Bu örnekte hatanın nasıl olabileceği gösteriliyor:</pre>
<blockquote>
<pre>// Add a double and an int using the Gen class
Gen&lt;double, int&gt; gc = new Gen&lt;double, int&gt;(10.125, 2005);
Console.WriteLine(gc.t + gc.u);
// Add a double and an int using the Obj class
Obj oc = new Obj(10.125, 2005);
Console.WriteLine((int)oc.t + (int)oc.u);</pre>
</blockquote>
<pre>Son satırda hatanın nasıl oluştuğunu görüyoruz. Double yerine int türüne dönüşüm yapılmış.Ne yazık ki derleyici 
bu hatayı yakalayamaz.Bunun yerine çalışma anında istisnai durum ortaya çıkacak ve buda programın çalışmayı durdurmasını
sağlayacaktır.Bu ahtalardan ve can sıkıntılarından kurtulmak için ne yapıyoruz generikleri kullanıyoruz:)</pre>
<h2>Constraints(Sınırlamalar) kullanımı:</h2>
<pre> Generikler, eğer sadece kodu yazıp bunu her sınıf için derlerseniz, oldukça sınırlı olurlar çünkü temel object
sınıfının yetenekleriyle sınırlanmış olursunuz. Bu sınırları ortadan kaldırmak için sizin generik paramterelerinizle
ihtiyacı olan yerlerde "constraint" leri yer değiştirerek   kullanılır.
Generikler 4 tip constraint destekler:
<strong>Interface:</strong>Generik tip elemanı olarak sadece belirli interfaceleri kullanmaya izin verir.
<strong>Base class:</strong> Generik tip elemanı olarak belirli temel sınıftan kalıtımla alınanları kullanır.
<strong>Constructor:</strong> parametresiz constructora ihtiyacı vardır.
<strong>Reference veya value tip:</strong>ref veya value tipe ihtiyacı vardır.
Aşağıdaki generik sınıf sadece IComparable arayüzünden dahil edilen tiplere izin verir.

class CompGen&lt;T&gt;
where T : IComparable
{
public T t1;
public T t2;
public CompGen(T _t1, T _t2)
{
t1 = _t1;
t2 = _t2;
}
public T Max()
{
if (t2.CompareTo(t1) &lt; 0)
return t1;
else
return t2;
}
}
Bu sınıf düzgün şekilde derlenir. Ancak eğer "where" sözcüğünü silersek, derleyici generik Tip T nin  bir CompareTo metodu
içermediğini belirten bir hata dönderir. Generik sınıfımıza Icomparable arayüzü implement edilerek CompareTo metodu sürekli
kullanılabilmesi garanti altına alınmış olur.</pre>
<h2><strong>Events(Olaylar)</strong></h2>
<p>Bir çok proje lineer değildir. Wpf tarzı uygulamalarda kullanıcının butona tıklaması veya klavyeden tuşa basması beklenir ve sonra oluşan olaya cevap verilir. Server uygulamasında network isteğinin gelmesi beklenir. .net frameworkün event-olay-larla yapabildikleri aşağıda belirtilmiştir.</p>
<p><strong>Event Nedir?</strong></p>
<p>Nesneler, olay göndericileri olarak bilinirler, bi hareket meydana geldiğinde &#8220;event&#8221;  tetiklenir ;kullanıcının butona tıklaması, bir metodun hesaplamayı bitirmesi veya ağdan bir veri alınması gibi&#8230; Olay yakalayıcıları; event ortaya çıktığında event handler olarak bilinen bir metod çalıştırır. Çünkü olay  göndericileri hangi metodun olayı yakalayacağını bilmez onun için event handler için pointer gibi davranan bir delegate yaratmalıyız.</p>
<p><strong>Delegate Nedir?</strong></p>
<p>Delegate bir metod için referansdır kendisi kod içermez. event handler imzası ile delegate imzası eşleşmelidir.aşağıdaki örnekte gösterilmiştir:</p>
<p><strong>public delegate void myEventHandler(object sender, EventArgs e);</strong></p>
<p><strong></strong>Bu örnekte olduğu gibi bir çok delegate değer döndürmez, Object ilk parametre iken ikinci parametre EventArgs sınıfından türeyen parametredir. Object, event handlerin ihtiyacı olduğu bilgileri içerir . Örneğin; event handleri kullanarak bir hesap sonucunu döndüren bir metod yarattınız, sonucu Object parametresinde sakladınız. daha sonra event handler içersinde object türünden doğru türe dönüşüm gerçekleşir.</p>
<p>delegate i silmedikçe event ortaya çıktığı herzaman event yakalanır.</p>
<p><strong>Event&#8217;a Nasıl Cevap Verilir:</strong></p>
<p>Event a cevap vermek için 2 işlem yapmalısınız:</p>
<p>1: event &#8216;a cevap verecek bir metod yazmalısınız. Bu metod delegate imzasıyla eşleşmeli. Tipik olarak bunun anlamı geri dönüş değeri void olmalı ve iki parametre içermeli: object ve EventArgs(veya o sııftan türeyen) aşağıda örnek  kod gösteriliyor:</p>
<pre><strong>private void button1_Click(object sender, EventArgs e)</strong>
<strong>{</strong>
<strong>// Method code</strong>
<strong>}</strong></pre>
<p>2:olayları hangi metodun alacağını işaret eden event handler eklenmeli:</p>
<p><strong>this.button1.Click += new System.EventHandler(this.button1_Click);</strong></p>
<p>olay ortaya çıktığında belirtilen metod çalışır.</p>
<p><strong>Eventların Tetiklenmesi</strong></p>
<p>Eventların tetiklenmesi için en az üç leyi yapmalıyız:</p>
<ul>
<li>aşağıdaki gibi bir delegate yaratılır:</li>
<li><strong>public delegate void MyEventHandler(object sender, EventArgs e);</strong></li>
<li>Aşağıda gösterildiği gibi bir event nesnesi yaratılır.</li>
<li><strong>public event MyEventHandler MyEvent;</strong></li>
<li>aşağıdaki kodda gösterildiği gibi event tetiklenmesi gerektiğinde aşağıda gösterildiği gibi delegate bir metod içersinden çağrılır</li>
<li><span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">EventArgs e = new EventArgs();</span></li>
<li><span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">if (MyEvent != null)</span></li>
<li><span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">{</span></li>
<li><span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">// delegate çağrılıyor</span></li>
<li><span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">MyEvent(this, e);</span></li>
<li><span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">}</span></li>
</ul>
<p>Eğer Event yakalayıcıya veri göndermek istersek EventArgs den özel bir sınıf türetmeliyiz</p>
<p><strong>Attribute(ÖzNitelik) Nedir?</strong></p>
<p>Attribute; bir tip, metod veya özelliği reflection tekniği olarak adlandırılan yöntemle programtik olarak sorgulama yoludur.</p>
<ul>
<li>bir sınıfın  güvenlik ayrıcalığı olduğunu belirtir.</li>
<li>güvenlik riskini azaltmak için belirtilen güvenlik ayrıcalıklarını kabul etmeyebilir</li>
<li>yetenekleri tanımlar, serializationu desteklemesi gibi</li>
</ul>
<p>assembly için bir  başlık açıklama ve copyright sağlar.</p>
<p>Attribute tipler System.Attribute temel sınıfından türemiştir ve [] notasyonu ile c# da belirtilir. Aşağıdaki örnek kod system.Reflection namespaceine ihtiyaç duyar burda nasıl  assembly e attribute eklendiği gösterilir.</p>
<p>&nbsp;</p>
<pre>// C# - AssemblyInfo.cs
[assembly: AssemblyTitle("ornekuygulama")]
[assembly: AssemblyDescription("Chapter 1 örnekleri")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("akten yazilim")]
[assembly: AssemblyProduct("ch01cs")]
[assembly: AssemblyCopyright("Copyright © 2011")]
[assembly: AssemblyTrademark("")]
VS otomatik olarak bazı standart attributeleri ekler bunlar; title,description,company
global unique identifier, ve versiyon. bunları her projenizde otomatik olarak değiştirebilirsiniz
attribute diğer programcılar içinde önemlidir. ihtiyaçlar yada yetenekleri belirtirler.örneğin
aşağıdaki örnekte, sınıfın serialize özelliği aktif etmek için, serialize attribute eklemeliyiz:
[Serializable]
class ShoppingCartItem
{
}

serialize attribute olmadan bir sınıf serialize değildir.basit olarak aşşağıki kod
attribute deklare edebilmek için c:boot.ini dosyasını okuması gerekir. çünkü bu attribute;eğer uygulamanın
bir açığı varsa çalışma zamanında işletilmeden önce throw fırlatması gerekir
using System.Security.Permissions;
[assembly:FileIOPermissionAttribute(SecurityAction.RequestMinimum,
Read=@"C:\boot.ini")]
namespace DeclarativeExample
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}</pre>
<h2><strong>Type Forwarding Nedir?</strong></h2>
<p><strong></strong>Type forwarding ile bir tipi bir assemblyden (assembly A) diğer assemblye (assembly B)taşıma işlemidir ve bu yolla assembly A kullanan clientların tekrar derlenmesine gerek yoktur. TypeForwardedTo attribute u ty pe forwarding için koda dahil edilmelidir. DAha sonra bir component(assembly) nakledilir ve client tarafından kullanılır. yani bir tipi bir assemblyden alıp diğerine postaladığınızda sorunsuz diğer assemblyde çalışmaya devam eder hemde tekrar derlemeden.Type forwarding sadece mevcut olan uygulamalardan referans gösterdiği componentler-assembly- çalışır.</p>
<p>bir sınıf kütüphanesini diğerine taşırken şu adımlar izlenir:</p>
<p>1:TypeForwarded attribute kaynak kütüphaneye eklenir.</p>
<p>2:Kaynak sınıf kütüphanesinden hedef tip kesilir.</p>
<p>3: hedef kütüphaneye hedef tip yapıştırılır.</p>
<p>4:her iki kütüphane tekrar derlenir.</p>
<pre>using System.Runtime.CompilerServices;
[assembly:TypeForwardedTo(typeof(DestLib.TypeA))]</pre>
<p>üçüncü dersimizinde sonuna gelmiş olduk uygulamaları daha sonra yayınlayacaz.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/124/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=124&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2011/08/28/bolum1-3siniflarin-olusturulmasi-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/08/res1-3-1.png" medium="image">
			<media:title type="html">res1.3.1</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/08/tbl1-6.png" medium="image">
			<media:title type="html">tbl1.6</media:title>
		</media:content>
	</item>
		<item>
		<title>bolum1.2: Ortak Referans Tiplerin Kullanımı</title>
		<link>http://aktenyazilim.wordpress.com/2011/07/28/bolum1-2-ortak-referans-tiplerin-kullanimi/</link>
		<comments>http://aktenyazilim.wordpress.com/2011/07/28/bolum1-2-ortak-referans-tiplerin-kullanimi/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 19:25:30 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm1:Framework&#039;un Temelleri]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c#visual studio]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[stringbuilder]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[value]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=109</guid>
		<description><![CDATA[.Net framework birçok referans tipe sahiptir.Referans tipler büyük esneklik sağlarken metodlara parametre olarak gönderildiğinde  mükemmel performans sağlar. Bu bölümü tamamladıktan sonra şunları yapıyor olacağız: Value tipler ile referans tipler arasındaki farklar bazı referans tiplerin tanıtımı StringBuilder tipini kullanmayı ve açıklaması dizileri yaratmayı ve sıralamayı dosyaları açmayı,okumayı,yazmayı ve kapatmayı exception(istisnai durum) ortaya çıktığında bunları yakalamayı ve [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=109&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>.Net framework birçok referans tipe sahiptir.Referans tipler büyük esneklik sağlarken metodlara parametre olarak gönderildiğinde  mükemmel performans sağlar. Bu bölümü tamamladıktan sonra şunları yapıyor olacağız:</p>
<ul>
<li>Value tipler ile referans tipler arasındaki farklar</li>
<li>bazı referans tiplerin tanıtımı</li>
<li>StringBuilder tipini kullanmayı ve açıklaması</li>
<li>dizileri yaratmayı ve sıralamayı</li>
<li>dosyaları açmayı,okumayı,yazmayı ve kapatmayı</li>
<li>exception(istisnai durum) ortaya çıktığında bunları yakalamayı ve cevap vermeyi</li>
</ul>
<p><strong>Referans Tip Nedir?</strong></p>
<p>Referans tipler  verinin adresini stack bölgesinde tutarlar.Belleğin stack bölgesinde verinin adresi tutulurken asıl veri ise heap bölgesindedir Heap bölgesindeki kullanılmayan eski verile garbage collection metodu otomatik olarak çağrılarak temizlenir. Garbage collection belleği periyodik olarak temizler.</p>
<blockquote><p>garbage collection dediğimiz ola Türkçe karşılığı çöptoplayıcısı gibi birşey.bellekteki gereksiz kullanılmayan değişkenleri ıvır zıvırları toplar çöpe atar. otomatik olarak yada GC.Collect. tarafından tetiklenerek çağrılır.</p></blockquote>
<p><strong>Referans ve Value Tiplerin Karşılaştırılması:</strong></p>
<p>Referans tipler veriyi direk saklamak yerine,heap bölgesindeki verinin adresini saklar.Bir referans tipi kopyaladığımızda verinin ikincisi üretilmez,onun yerine heap bölgesindeki aynı verinin adresi gösteren ikinci referans tip oluşturulur.Örneği inceleyelim:</p>
<blockquote>
<pre>struct Sayilar
        {
            public int deger;
            public Sayilar(int _deger)
            {
                deger = _deger;
            }
            public override string ToString()
            {
                return deger.ToString();
            }
        }</pre>
</blockquote>
<p>Aşağıdaki kod da Sayilar struct ını nasıl kullanacağmızı görüyoruz.</p>
<blockquote>
<pre>        static void Main(string[] args)
        {
            Sayilar s1 = new Sayilar(0);
            Sayilar s2 = s1;
            s1.deger +=1;
            s2.deger +=2;
            Console.WriteLine("s1 ={0},s2={1}",s1,s2);

        }</pre>
</blockquote>
<pre>Örneğimizde Value tipinde olan struct türündeki sayilar yapımızda s1 adında bir değişken tanımladık.
s1 değişkenimizin değerini tanımlama esnasında 0 değerini verdik. daha sonra  s1in değerini 1 arttırken
s2nin değerini 2 arttırdık.sonuç aşağıda,eğer ki biz burada struct yerine class kullansa idik s1in değeri 3
s2 nin değeri 3 olacaktı.referans tip ve value tip arasındaki farkı kısmen görmüş olduk.Referans tipteki bir
değişkeni başka bir referans tipteki değişkene kopyaladığımızda,birinin değeri değişirse diğerininde değeri
değişecektir çünkü her ikiside heap alanındaki aynı adresi işaret ediyor olacaktır.
<a href="http://aktenyazilim.files.wordpress.com/2011/07/cikti1-3.png"><img class="alignnone size-full wp-image-110" title="cikti1.3" src="http://aktenyazilim.files.wordpress.com/2011/07/cikti1-3.png" alt="" width="315" height="79" /></a></pre>
<h2><strong>Built-in Referans Tipler</strong></h2>
<p>.Net framework 2500 ün üzerinde referans tip sunar.Aşağıda sık kullanılan referans tipleri görüyoruz.</p>
<ul>
<li>System.Object:.Net framework ün en genel tipidir.Herhangi bir tipi system.object tipine çevirebilirsiniz.Herhangi bir tipin default üyesi olan ToString,GetType ve Equals System.Object tipinden türemiştir.</li>
<li>System.String: text veriler için kullanılır.</li>
<li>System.Text.StringBuilder:Dinamik text veriler için kullanılır.</li>
<li>System.Array: Diziler için kullanılır.Tüm dizilerin temel sınıfıdır.</li>
<li>System.IO.Stream:Dosya,cihaz yada ağ iletişimi için buffer(tampon) görevi görür.</li>
<li>System.Exception:Sistemve uygulamalar için tanımlanmış istisai durumlar için kullanılır.</li>
</ul>
<h2></h2>
<h2><strong>String ve String Builder</strong></h2>
<p>Tipler sadece veri içermezler,aynı zamanda verinin hangi  türe ait olduğunu da bize söylerler.örneğin System.String tipininüyeleri text verilerle çalışacağımızı belirtir.Aşağıdaki kod ile hızlı arama ve değişiklik yapabiliriz.</p>
<p>string s=&#8221;Bu yazı bazı textleri aramak için&#8221;;</p>
<p>s=s.Replace(&#8220;aramak&#8221;,&#8221;değiştirmek&#8221;);</p>
<p>console.writeline(s);</p>
<p>.Net frameworkte System.String tipindeki değişkenler sabittir. değişken oluşturulduğunda bu değişkeni değerini değiştirmek istediğimizde  her değişim için aslında yeni bir adet strig değişkeni oluşturulur ve eskisi garbage collection vasıtasıyla silinir:</p>
<p>string s;</p>
<p>s=&#8221;ornek&#8221;;          &#8221;ornek&#8221;</p>
<p>s+=&#8221;yazı&#8221;;           &#8220;ornek yazı&#8221;</p>
<p>s+=&#8221;deneme&#8221; ;          &#8221;ornek yazı deneme&#8221;</p>
<p>Bu kodları çalıştırdığımızda son string    bir referansa sahiptir diğer 2 değişkten garbage collection tarafından silinmiştir.garbage collection bize güzellik yapıyor olsada bu performansı olumsuz etkileyen geçici string oluşturma işlemini mecbur kalmadıkça yapmamalıyız.Ne yapcaz ozaman ;</p>
<p>Concat,join veya format metodlarını kullanacaz ne içün?bi stringe bir den fazla eleman eklemek için.</p>
<p>yada Stringbuilder sınıfı ile dinamik stringler oluşturucaaz.</p>
<p>stringBuilder çözümü oldukça esnektir,birden fazla durumu gerçekletirmeye izin verir.default olarak yapıcı metodu 16 bytelık alan ayırırken bunu isterseniz değiştirebilirsiniz.</p>
<p>system.Text.StringBuilder sb=new StringBuilder(30);</p>
<p>sb.Append(&#8220;ornek&#8221;);</p>
<p>sb.Append(&#8220;yazı&#8221;);</p>
<p>sb.Append(&#8220;deneme&#8221;);</p>
<p>string s=sb.ToString();</p>
<p>console.writeline(s);</p>
<p>Aşağıdaki tabloda string sınıfının operatorleri görülmektedir.</p>
<p><a href="http://aktenyazilim.files.wordpress.com/2011/07/tbl1-4.png"><img class="alignnone size-full wp-image-113" title="tbl1.4" src="http://aktenyazilim.files.wordpress.com/2011/07/tbl1-4.png" alt="" width="405" height="241" /></a></p>
<h2>Dizilerin Oluşturulması  ve Sıralanması</h2>
<p>Diziler,normal değişken tanımlar gibi tanımlanır araya köşeli parantez eklenir.String tipte olan system.Array dizinin içerdiği verilerle çalışmak için gerekli elemanları sunar.</p>
<p>int sayilar [] ={23,20,33};</p>
<p>Array.Sort(sayilar);</p>
<p>console.writeline(&#8220;{0},{1},{2}&#8221;,sayilar[0],sayilar[1],sayilar[2]);</p>
<h2>&#8220;Stream&#8221;ların kullanımı</h2>
<p>Streamlar bir diğer ortak referans tipidir.Diskten veri okuma diske veri yazma ağ üzerindeki iletişimlerde stream kullanırız.System.IO.Stream stream tipinin tüm görevlerini içerir.Ek olarak network streamleri System.Network.Sockets namespace&#8217;inde bulunurken, şifreli streamler ise System.Security.Cryptography namespace&#8217;i altında bulunur..</p>
<p><a href="http://aktenyazilim.files.wordpress.com/2011/07/tbl1-5.png"><img class="alignnone size-full wp-image-115" title="tbl1.5" src="http://aktenyazilim.files.wordpress.com/2011/07/tbl1-5.png" alt="" width="397" height="136" /></a></p>
<p>Basitçe dosyaya nasıl veri yazıldığını görelim.StreamReader ve StreamWriter, text dosyasına okuma veya yazma işlemi yapılmadan önce aktif edilmelidir.Dosya adını yapıcı metoda gönderirseniz  tek satır kod ile hem streamı aktif eder hemde dosyayı okuma/yazma işlemi için açmış olursunuz.Dosyayla işimiz bittikten sonrada Close metodu ile dosyayı kapatırız ki dosya kilitli kalmasın.Aşağıdaki kod ile text dosyasına okuma/yazma işlemi nasıl yapılır onu görüyoruz</p>
<p>System.IO namespaceini kodumuzun en üstüne eklemeyi unutmayalım.</p>
<h2></h2>
<pre>//yazacağımız text dosyasını belirtiyoruz,dosya mevcut değilse
            //oluşturulur.
            StreamWriter sw = new StreamWriter("text.txt");
            sw.WriteLine("deneme yazı");
            sw.Close();
            //okunacak dosyayı belirtiyoruz.ekrana yazdırılıyor.
            StreamReader sr = new StreamReader("text.txt");
            Console.WriteLine(sr.ReadToEnd());
            sr.Close();
stream konusu ikinci bölümde detaylı incelenecek.</pre>
<h2></h2>
<h2>Exception(istisnai durum)ları oluşması ve yakalanması</h2>
<p>Exceptionlar rogramımız çalışırken karşımıza çıkan beklenmedik olaylardır. Örneğin programımız büyük bir text dosyasını flash diskten okurken gereksiz bir hamleyle birisi diski çıkarırsa ne olur ekranda hata mesajıyla karşılaşırız.&#8221;diski takınız&#8221;&#8230;</p>
<p>Exceptionlar,programımızın tamamen çökmesine asla neden olmamalıdır. Bunun yerine exceptionlar ortaya çıkmadan bunun planı yapılmalı ve onu yakalamalı ve olaya cevap vermeliyiz.Örneğimizde kullanıcı flash diski çıkardığında kullanıcıyı dosyanın kullanılabilir durumda olmadığını belirtip kullanıcının cevabını beklemek uygun olur. Aşağıdaki kod bloğunda System.IO namespace ekleyelim.</p>
<pre> try
            {
                StreamReader sr = new StreamReader(@"c:\boot.ini");
                Console.WriteLine(sr.ReadToEnd());
            }
            catch (Exception ex)
            {//dosya okunurken herhangi bir problem olursa hata mesajı görüntülenir.
                Console.WriteLine("dosya okuma hatası"+ex.Message);
            }</pre>
<p><a href="http://aktenyazilim.files.wordpress.com/2011/07/res1-2-1.png"><img class="alignnone size-full wp-image-117" title="res1.2.1" src="http://aktenyazilim.files.wordpress.com/2011/07/res1-2-1.png" alt="" width="428" height="94" /></a></p>
<p>Boot.ini dosyasını bulamadığı için kullanıcıyı uyardık ve böylece programımızın herhangi bir satırındaki istemediğimiz bir durum ortaya çıktığında programın çökmesini engellemiş olduk.Burada catch bloğu içerisindeki kod çalıştı ve kullanıcı &#8220;dosya bulunamadı&#8221; mesajı ile uyarıldı.Eğerki  dosya mevcut olsaydı try bloğu çalışacak ve dosya içeriği okunarak ekrana yazdırılacaktı.</p>
<p>Temel exception  sınıfı çok kullanışlıdır.hata mesajlarını ve uygulama verilerini içerir.ek olarak .Net frameworkün sunduğu yüzlerce exception sınıfı farklı tiplerde olayları tanımlar bunların tamamı System.SystemException dan türemiştir.Ek olarak standart exception sınıfı daha detaylı olayları tanımlamaya izin verir,kendi exceptionlarımızı System.ApplicationException dan türetebiliriz.</p>
<p>Çoklu exception sınfı farklı tipteki hatalara farklı cevaplar verebilmeyi sağlar.Çalışma zamanında sadece ilk catch bloğu exception tipini karşılaştırırken diğer sıradaki catch blokları en özelden daha az özele doğru sıralanır.Bu işlem exceptionları fitlreleme olarak da adlandırılır.Aşağıdaki kodlar farklı hata mesajları göstermeye imkan sağlar.</p>
<pre>try
{
StreamReader sr = new StreamReader("text.txt");
Console.WriteLine(sr.ReadToEnd());
}
catch (System.IO.FileNotFoundException ex)
{
Console.WriteLine("Bu dosya bulunamadı.");
}
catch (System.UnauthorizedAccessException ex)
{
Console.WriteLine("Dosyaya erişmek için gerekli izniniz yok .");
}
catch (Exception ex)
{
Console.WriteLine("dosya okuma hatası: " + ex.Message);
}
Exceptionyakalama olayı finally bloğu ile son bulur.Finally bloğu try ve catch blokları işletildikten sonra yada herhangi bir exception oluşmazsa  çalışır. 
Bununla birlikte isterseniz finally bloğuna kapatılması gereken streamlar varsa yada exception ortaya çıktığında temizlenmesi gereken nesneler varsa onları
temizlemek için kullanabilirsin.Aşağıdaki kod örneğindeki finally bloğunda streamreader nesnesi kapatılıyor ve eğer exception oluşmazsa kapanıyor.
StreamReader sr = new StreamReader("text.txt");
try
{
Console.WriteLine(sr.ReadToEnd());
}
catch (Exception ex)
{
// Eğer dosyayı okurken herhangi bir hata çıkarsa burda görüntülenir.
Console.WriteLine("Dosya okuma hatası: " + ex.Message);
}
finally
{
// herhalukarda stream nesnesini kapat
sr.Close();
}
streamreader nesnesinin tanımlaması try bloğunun dışına taşınmıştır.Çünkü finally bloğundan try bloğunun içerisine erişemiyoruz.
Exception.Message özelliği exceptionla ilgili açıklamalarıbir text mesajla sağlamaktadır.örneğin bir dosya mevcut değilse
.net framework exceptionla beraber şu  mesajı verir:dosya bulunamadı:"dosya ismi"
Exception.StackTrace özelliği debug işlemi sırasında çok faydalıdır.çünkü özel olarak satır numarası ve dosya vermektedir.
Bu dersimizinde sonuna geldik.Uygulamaları ayrı bir sayfada yapalım.</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=109&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2011/07/28/bolum1-2-ortak-referans-tiplerin-kullanimi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/07/cikti1-3.png" medium="image">
			<media:title type="html">cikti1.3</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/07/tbl1-4.png" medium="image">
			<media:title type="html">tbl1.4</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/07/tbl1-5.png" medium="image">
			<media:title type="html">tbl1.5</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/07/res1-2-1.png" medium="image">
			<media:title type="html">res1.2.1</media:title>
		</media:content>
	</item>
		<item>
		<title>bölüm1.1:Value tiplerin kullanımı</title>
		<link>http://aktenyazilim.wordpress.com/2011/07/21/bolum1-1value-tiplerin-kullanimi/</link>
		<comments>http://aktenyazilim.wordpress.com/2011/07/21/bolum1-1value-tiplerin-kullanimi/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 17:54:33 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm1:Framework&#039;un Temelleri]]></category>
		<category><![CDATA[c#.net]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[value]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=92</guid>
		<description><![CDATA[.Net framework te kullanacağımız tipler oldukça basittir. Öncelikle boolean ve numeric ifadeler Value Tipteki ifadelerdir.Value tipteki ifadeler nedir öyleyse?Value bildiğiniz üzere &#8220;değer&#8221; anlamını taşıdığı için bu tiplere bu ad verilmiştir. Bunun anlamı bu türden değişkenler; veriyi direkt olarak kendi içlerinde saklarlar. Ne yani diğer değişkenler veriyi dışında mı saklıyor? Hayır;Value veri tipinin kardeşi olan &#8220;referans&#8221; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=92&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>.Net framework te kullanacağımız tipler oldukça basittir. Öncelikle boolean ve numeric ifadeler Value Tipteki ifadelerdir.Value tipteki ifadeler nedir öyleyse?Value bildiğiniz üzere &#8220;değer&#8221; anlamını taşıdığı için bu tiplere bu ad verilmiştir. Bunun anlamı bu türden değişkenler; veriyi direkt olarak kendi içlerinde saklarlar. Ne yani diğer değişkenler veriyi dışında mı saklıyor? Hayır;Value veri tipinin kardeşi olan &#8220;referans&#8221; veri tipi, veriyi değil,verinin tutulduğu adresi  sakladığı için öyle dedik. Referans veri tipine diğer derste değineceğiz. Value tipten değişkenlerimiz veriyi &#8220;Stack&#8221; dediğimiz bellek bölgesinde saklar. Value Tipler genel olarak üç türü vardır:</p>
<ol>
<li>Built-in dediğimiz hali hazırdaki tipler</li>
<li>kullanıcının tanımladığı-tanımlayacağı tipler</li>
<li>Enumarator&#8217;ler</li>
</ol>
<p>Bu dersimizin sonunda;</p>
<ul>
<li>sık kullanılan built-in value  tiplerini</li>
<li>value tipinde değişken tanımlamayı</li>
<li>kendi tipinizi yaratmayı</li>
<li>enumaratorleri kullanmayı</li>
</ul>
<p>öğreneceksiniz.</p>
<p><strong>Built-in Value Tipleri</strong></p>
<p><strong></strong> Built-in value tipleri .Net frameworkün sağladığı temel tiplerdir.Tüm numerik tipler bu guruba girer. Numerik tiplerle çalışırken bu tiplerin hafızada kapladığı alana dikkat etmek gerekir.Aşağıdaki tabloda sık kullanılan numerik tipleri ve özellikleri gösterilmektedir. <a href="http://aktenyazilim.files.wordpress.com/2011/07/tablo1-1.jpg"><img class="alignnone size-full wp-image-94" title="tablo1.1" src="http://aktenyazilim.files.wordpress.com/2011/07/tablo1-1.jpg" alt="" width="402" height="519" /></a>                                                                                                                       Tablo1.1 built-in value tipler</p>
<blockquote><p>built in tiplerde performansı arttırmak için: 32 bit integer tipini sayaç veya integral değerleri için kullandığınızda performanslı çalışabilirsiniz.double tipini ise daha ziyade virgüllü sayılarda kullanmak uygundur,çünkü bunlar donanım tarafında (işlemci) optimize edilir.</p></blockquote>
<p>Numerik olmayan value tipler aşağıda gösterilmiştir.<a href="http://aktenyazilim.files.wordpress.com/2011/07/tablo1-2.jpg"><img class="alignnone size-full wp-image-95" title="tablo1.2" src="http://aktenyazilim.files.wordpress.com/2011/07/tablo1-2.jpg" alt="" width="377" height="211" /></a></p>
<p>tablo1.2 numerik olmayan value tipler</p>
<p><strong>Value tipte değişkenlerin tanımlanması</strong></p>
<p>Bir tipi kullanmak için öncelikle onun bir örneğini herhangibir sembolle ifade etmeliyiz.Value tipler gizli yapıcı metoda sahiptir.Yapıcı(constructor) metotlara daha sonra değineceğiz.bu gizli yapıcı metot ne iş yapar?örneğini oluşturacağımız value tipin <em>New </em>sözcüğünü kullanmadan oluşturmamızı sağlar.yapıcı metot normalde default  value olarak 0 veya null değer atar.aşağıdaki koda bakınca daha ne anlaşılacaktır: bool b=false; normalde bu  kodu; <em>bool b=new bool;</em> <em>b=false;</em> şeklinde de yazabilirdik. Örneğin biz bir değişkene nullable değer atamak istiyoruz.değişkenimiz olsun ama henüz değeri verilmemiş olsun.Kullanıcının doldurduğu bir formda evet/hayır şeklinde bir cevap olacağını düşünelim,kullanıcı henüz soruyu cevaplamadıysa null değer alan bir değişken tanımlayalim. <em>Nullable&lt;bool&gt; b=null;</em></p>
<ul>
<li>Bir değişkeni nullable olarak tanımlarsanız, O  değişkenin HasValue ve Value üyeleri aktif olur.HasValue üyesini sorgulayarak, değişkenin değeri Value üyesi ile belirlenebilir.</li>
</ul>
<p><em>if(b.HasValue)</em> <em>Console.WriteLine(&#8220;b nin değeri:&#8221;,b.Value);</em> <em>else</em> <em>Console.WriteLine(&#8220;b nin değeri belirtilmemiş&#8221;);</em></p>
<p><strong>Kullanıcı tanımlı tipler nasıl oluşturulur?</strong></p>
<p><strong></strong> Kullanıcının  tanımladığı tipleri <em>structures (yapılar)</em> olarak adlandırıyoruz.Diğer value tipleri gibi kullanıcı tanımlı tiplerde veriyi direkt olarak stack bölgesinde saklar. Strucutre lar sınıf tanımlamalarına benzer şekilde tanımlanırlar. Structure lar diğer veri tiplerinide içine alıp bu şekilde ilgili verilerle işlem yapmayı sağlar. Aşağıdaki örneği inceleyelim:</p>
<blockquote>
<pre>struct Ogrenci
        {

            int Boy;

            int Kilo;

            int Yas;

            public Ogrenci(int _yas, int _boy, int _kilo)
            {

                Yas = _yas;

                Boy = _boy;

                Kilo = _kilo;

            }

            public void Goruntule()
            {

                Console.WriteLine("Ogrencinin Boyu:" + Boy.ToString());

                Console.WriteLine("Ogrencinin Kilosu:" + Kilo.ToString());

                Console.WriteLine("Ogrencinin Yasi:" + Yas.ToString());

            }

        }</pre>
</blockquote>
<p>Burada structure mızı tanımlarken <em>struct</em> terimini kullandık.Şimdi bu structure mızın nasıl kullanıldığını görelim.</p>
<blockquote>
<pre>  static void Main(string[] args)
        {
            Ogrenci ahmet = new Ogrenci(16, 170, 67);
            ahmet.Goruntule();
        }

Kodumuzun çiktisi aşağıdaki gibi olacaktır.
<a href="http://aktenyazilim.files.wordpress.com/2011/07/cikti1.jpg"><img class="alignnone size-full wp-image-100" title="cikti1" src="http://aktenyazilim.files.wordpress.com/2011/07/cikti1.jpg" alt="" width="370" height="112" /></a></pre>
</blockquote>
<pre>Biz bu Ogrenci Structure'ımızı sınıf yapısına kolaylıkla çevirebiliriz.
Nasıl olduğunu görmek için;<em>struct </em>ifadesi yerine <em> class </em>ifadesini yazıyoruz.
Ardından bizim Ogrenci Structure mız Sınıf oluveriyor.Diğer bir değişle Value tipteki
Ogrenci yapısını referans tipteki Sınıf türüne çevirmiş olduk.Stack bölgesinde saklanan ogrenci yapısı
belleğin Heap bölgesine saklanmış oldu
.structure lar sınıflardan daha etkin kullanılır.
Bir sınıf yerine Bir structure tanımlarsak, performansınız
daha yüksek olacaktır.
<strong> </strong></pre>
<p><strong>Enumaratorlerin Yaratılması</strong></p>
<p>Enumaratörler sembollerle gösterilen sabit değerlerdir.</p>
<p>Enumaratörler bize program yazarken sabit seçenekler sunar. Örneğin</p>
<blockquote><p>enum  Unvan {Dr,Muh,Tek,};</p></blockquote>
<p>şeklinde tanımlanan bir enumaratörümüz olsun,  burada Dr,Muh ve Tek şeklinde 3 farklı üyesi olan enumaratörü görüyoruz. Unvan enumaratörünü herhangi bir yerde kullanırken tanımladığımız sabit 3 farklı değeri  kullanabileceğiz.</p>
<pre>        enum Unvan {muh,dr,ogr};
        static void Main(string[] args)
        {
            Unvan kisi = Unvan.dr;
            Console.WriteLine("unvan:"+kisi);
        }
<a href="http://aktenyazilim.files.wordpress.com/2011/07/cikti1-2.jpg"><img class="alignnone size-full wp-image-102" title="cikti1.2" src="http://aktenyazilim.files.wordpress.com/2011/07/cikti1-2.jpg" alt="" width="328" height="92" /></a>
Enumaratörleri sayesinde
numerik değerler yerine anlamlı semboller kullanabilir,
kodlarımızı daha okunabilir,daha basit,hatalardan arındırılmış hale getirebiliriz.</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=92&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2011/07/21/bolum1-1value-tiplerin-kullanimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/07/tablo1-1.jpg" medium="image">
			<media:title type="html">tablo1.1</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/07/tablo1-2.jpg" medium="image">
			<media:title type="html">tablo1.2</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/07/cikti1.jpg" medium="image">
			<media:title type="html">cikti1</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2011/07/cikti1-2.jpg" medium="image">
			<media:title type="html">cikti1.2</media:title>
		</media:content>
	</item>
		<item>
		<title>Bölüm9 ders1 ders Sonu özeti:</title>
		<link>http://aktenyazilim.wordpress.com/2009/07/01/bolum9-ders1-ders-sonu-ozeti/</link>
		<comments>http://aktenyazilim.wordpress.com/2009/07/01/bolum9-ders1-ders-sonu-ozeti/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 08:50:51 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm9:Installing ve Configuration Application]]></category>
		<category><![CDATA[.config]]></category>
		<category><![CDATA[application.config]]></category>
		<category><![CDATA[connection string]]></category>
		<category><![CDATA[custom section]]></category>
		<category><![CDATA[ders sonu özet]]></category>
		<category><![CDATA[system.configuration]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=58</guid>
		<description><![CDATA[Uygulamalarımızda System.Configuration namespace&#8217;i kullanarak uygulama ayarlarını okuyabilir ve yazabiliriz. Ayarları yazabilmek için; bir Configuraiton nesnesini ConfiguraitonManager.OpenExeConfiguraiton çağırarak yaratırız : Configruaiton config = ConfigurationManager.OpenExeConfiguration(); Daha sonra Configuration.Add() metodunu çağırarak uygulamamız için gerekli isim -değer çiftini .config dosyamıza ekleriz. Son olarak Configuration.Save() metodu ile .config dosyamızda ki değişiklikleri saklarız. Ayarları okuyabilmek için static ConfigurationManager.AppSettings koleksiyonunu kullanırız. Eğer [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=58&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<ul>
<li>Uygulamalarımızda System.Configuration namespace&#8217;i kullanarak uygulama ayarlarını okuyabilir ve yazabiliriz.</li>
<li>Ayarları yazabilmek için; bir Configuraiton nesnesini ConfiguraitonManager.OpenExeConfiguraiton çağırarak yaratırız : <strong>Configruaiton config = ConfigurationManager.OpenExeConfiguration();</strong> Daha sonra <strong>Configuration.Add()</strong> metodunu çağırarak uygulamamız için gerekli isim -değer çiftini .config dosyamıza ekleriz. Son olarak <strong>Configuration.Save() </strong>metodu ile .config dosyamızda ki değişiklikleri saklarız.</li>
<li>Ayarları okuyabilmek için static <strong>ConfigurationManager.AppSettings</strong> koleksiyonunu kullanırız. Eğer conneciton Strings lere ulaşmak istiyorsak <strong>ConfiguraitonManager.ConnectionStrings</strong> static koleksiyonunu kullanırız.</li>
<li>Eğer sistem tabanlı konfigurasyon dosyasını okumak istiyorsak (Machine.Config); <strong>ConfigurationManager.OpenMachineConfiguration</strong> metodunu çağırarak bir <strong>Configuration</strong> nesnesi oluşturulur.</li>
<li>Uygulamalarımızın konfigurasyon ayarlarına özel bölümler eklemek istersek <strong>ConfigurationSection<span style="font-weight:normal;"> </span></strong>sınıfından türetilebilir olmasına rağmen;</li>
<li>.net framework 2.0 ve sonrasında IconfigurationSectionHandler arayüzünü kullanamayız. Buna izin verilmez.!!!</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/58/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=58&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2009/07/01/bolum9-ders1-ders-sonu-ozeti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>
	</item>
		<item>
		<title>Konfigurasyon-ayarlarinin-surekli-olarak-saklanmasi bölüm sonu Uygulama</title>
		<link>http://aktenyazilim.wordpress.com/2009/07/01/konfigurasyon-ayarlarinin-surekli-olarak-saklanmasi/</link>
		<comments>http://aktenyazilim.wordpress.com/2009/07/01/konfigurasyon-ayarlarinin-surekli-olarak-saklanmasi/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 08:22:40 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm9:Installing ve Configuration Application]]></category>
		<category><![CDATA[.config]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[connection string]]></category>
		<category><![CDATA[custom section]]></category>
		<category><![CDATA[digiTurk2009v.2]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[kaydet]]></category>
		<category><![CDATA[machine.Config]]></category>
		<category><![CDATA[Mcts]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[server ismi]]></category>
		<category><![CDATA[system.configuration]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=51</guid>
		<description><![CDATA[Bir proje geliştirdiğimizde karşımıza çıkan problemlerden birisi,programı kullanacak kişinin yada BT yöneticisinin ,  program ayarlarını değiştirmek zorunda kalabilmesidir.  Örneğin ağda çalışan bir programımız var ve serverdaki veri tabanına bağlanarak işlem yapıyor. Programımızın bağlantı cümlesini uygulamamızın .config dosyasına atarak, üzerinde değişiklik yapmak istediğimizde kolaylıkla değiştirebiliriz: örneğin bağlanılacak server in ismini register,text,xml yada . config dosyasında tutmamız [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=51&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bir proje geliştirdiğimizde karşımıza çıkan problemlerden birisi,programı kullanacak kişinin yada BT yöneticisinin ,  program ayarlarını değiştirmek zorunda kalabilmesidir.  Örneğin ağda çalışan bir programımız var ve serverdaki veri tabanına bağlanarak işlem yapıyor. Programımızın bağlantı cümlesini uygulamamızın .config dosyasına atarak, üzerinde değişiklik yapmak istediğimizde kolaylıkla değiştirebiliriz: örneğin bağlanılacak server in ismini register,text,xml yada . config dosyasında tutmamız gerekir.</p>
<p>Aşağıdaki uygulamamızda .config dosyasına kişinin isim ve boy verisini kaydeden ve bu veriyi proğram başlarken .config dosyasından okuyan program kodlarını görüyorsunuz.</p>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:20px;width:1px;height:1px;">using System.Configuration;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:20px;width:1px;height:1px;">using System.Collections.Specialized;</div>
<p>Uygulamamıza  System.Configuration.dll &#8216;ini Add Reference seçeneğinden ekliyoruz ve aşağıdaki namespace&#8217;leri ekliyoruz</p>
<p>using System.Configuration;</p>
<p>using System.Collections.Specialized;</p>
<div>==============================================================================</div>
<div>
<div>using System;</div>
<div>using System.Collections.Generic;</div>
<div>using System.ComponentModel;</div>
<div>using System.Data;</div>
<div>using System.Drawing;</div>
<div>using System.Text;</div>
<div>using System.Windows.Forms;</div>
<div>using System.Configuration;</div>
<div>using System.Collections.Specialized;</div>
<div>namespace WindowsFormsApplication6</div>
<div>{</div>
<div>public partial class Form1 : Form</div>
<div>{</div>
<div>public Form1()</div>
<div>{</div>
<div>InitializeComponent();</div>
<div>}</div>
<div>private void button1_Click(object sender, EventArgs e)</div>
<div>{</div>
<div>Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);</div>
<div>//baslik adında element varsa sil</div>
<div>config.AppSettings.Settings.Remove(&#8220;Baslik&#8221;);</div>
<div>//textBox&#8217;a yazdığımız değeri .config dosyamıza ekliyoruz.</div>
<div>config.AppSettings.Settings.Add(&#8220;Baslik&#8221;,textBox1.Text);</div>
<div>////Deger adında element varsa sil</div>
<div>config.AppSettings.Settings.Remove(&#8220;Deger&#8221;);</div>
<div>//track bardaki değeri .config dosyamıza ekliyoruz</div>
<div>config.AppSettings.Settings.Add(&#8220;Deger&#8221;,trackBar1.Value.ToString());</div>
<div>//değişiklikleri .config dosyamıza kaydediyoruz</div>
<div>config.Save(ConfigurationSaveMode.Modified);</div>
<div>}</div>
<div>private void Form1_Load(object sender, EventArgs e)</div>
<div>{</div>
<div>// proğram çalışmaya başladığı anda .config dosyamıza kaydettiğimiz değerleri okuyabilmek içn aşağıdaki kodları kullanıyoruz.</div>
<div>if (ConfigurationManager.AppSettings["Baslik"] != null)</div>
<div>{</div>
<div>this.Text = ConfigurationManager.AppSettings["Baslik"];</div>
<div>textBox1.Text = ConfigurationManager.AppSettings["Baslik"];</div>
<div>}</div>
<div>if (ConfigurationManager.AppSettings["Deger"] != null)</div>
<div>{</div>
<div>trackBar1.Value = int.Parse(ConfigurationManager.AppSettings["Deger"]);</div>
<div>}</div>
<div>}</div>
<div>}</div>
<div>}</div>
<div><img class="alignnone size-full wp-image-52" title=".config_ornek6" src="http://aktenyazilim.files.wordpress.com/2009/07/config_ornek6.jpg" alt=".config_ornek6" width="356" height="181" /></div>
</div>
<p>uygulamızın ilk çalıştığı andaki ekran görüntüsü , config dosyamızada herhangi bir elemnt eklenmediği için formumuzun başlığı ve trackbarda deki değerler default.</p>
<p><img class="alignnone size-full wp-image-53" title=".config_ornek6_2" src="http://aktenyazilim.files.wordpress.com/2009/07/config_ornek6_2.jpg" alt=".config_ornek6_2" width="356" height="181" /></p>
<p>textboxa ornek ve trackbar değerinide 3 e getiriyoruz.ve button1 e basarak kaydediyoruz. Formumuzu kapatıyoruz.</p>
<p><img class="alignnone size-full wp-image-54" title="sonu" src="http://aktenyazilim.files.wordpress.com/2009/07/sonu.jpg" alt="sonu" width="356" height="183" /></p>
<p>proğgramı tekrar açtıktan sonra form load olayına yazdığımız kodlar çalışıyor ve formumuzun başlığı track bar değeri ve textboxa .config dosyasından alınan değerler yazılıyor.</p>
<p>Bu değerleri uygulamızın exe dosyasıyla aynı klasörde bulunan &lt;uygulama-ismi&gt;.config dosyasında &lt;appSettings&gt; bölümünde bulabiliriz.</p>
<p><em>iyi günler&#8230;</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/51/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=51&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2009/07/01/konfigurasyon-ayarlarinin-surekli-olarak-saklanmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2009/07/config_ornek6.jpg" medium="image">
			<media:title type="html">.config_ornek6</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2009/07/config_ornek6_2.jpg" medium="image">
			<media:title type="html">.config_ornek6_2</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2009/07/sonu.jpg" medium="image">
			<media:title type="html">sonu</media:title>
		</media:content>
	</item>
		<item>
		<title>Uygulamaların Konfigurasyonu-6(Özel bölümleri IConfigurationSectionHandler  Interface&#8217;i Kullanarak oluşturmak:)</title>
		<link>http://aktenyazilim.wordpress.com/2009/06/23/uygulamalarin-konfigurasyonu-6ozel-bolumler-olusturma/</link>
		<comments>http://aktenyazilim.wordpress.com/2009/06/23/uygulamalarin-konfigurasyonu-6ozel-bolumler-olusturma/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 11:36:39 +0000</pubDate>
		<dc:creator>aktenyazilim</dc:creator>
				<category><![CDATA[Bölüm9:Installing ve Configuration Application]]></category>
		<category><![CDATA[yazılım eğitimi--c#]]></category>
		<category><![CDATA[.config]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[custom section]]></category>
		<category><![CDATA[machine.Config]]></category>

		<guid isPermaLink="false">http://aktenyazilim.wordpress.com/?p=44</guid>
		<description><![CDATA[Özel sınıf yaratarak, uygulamanızın özel ayarlarına erişilmesine izin verebilirisiniz. Bunun için iki yol vardır; IConfigurationSectionHandler interface&#8217;i ve ConfigurationSection dan türetilmiş bir sınıf. Özel Bölümleri IConfigurationSectionHandler  Interface&#8217;i Kullanarak oluşturmak: Tıpku Machine.config dosyasındaki  farklı her bölüm için benzersiz sınıflar kullanıldığı gibi, IConfigurationSectionHandler arayüzünden kalıtımla bir sınıf oluşturarak, uygulamanızın .config dosyası içinde özel bölümler için benzersiz sınıflar oluşturabilirsiniz. IConfigurationSectionHandler [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=44&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Özel sınıf yaratarak, uygulamanızın özel ayarlarına erişilmesine izin verebilirisiniz. Bunun için iki yol vardır; <em>IConfigurationSectionHandler</em> interface&#8217;i ve <em>ConfigurationSection </em> dan türetilmiş bir sınıf.</p>
<p><strong>Özel Bölümleri</strong> <em><strong>IConfigurationSectionHandler  Interface&#8217;i <span style="font-style:normal;">Kullanarak oluşturmak:</span></strong></em> Tıpku Machine.config dosyasındaki  farklı her bölüm için benzersiz sınıflar kullanıldığı gibi, <em><strong>IConfigurationSectionHandler</strong><span style="font-style:normal;"> arayüzünden kalıtımla bir sınıf oluşturarak, uygulamanızın .config dosyası içinde özel bölümler için benzersiz sınıflar oluşturabilirsiniz. </span></em> <strong><em>IConfigurationSectionHandler </em><span style="font-weight:normal;">arayüzünü uygulamanıza dahil ettiğinizde, sadece bir &#8220;yapıcıya&#8221;(constructor) ve  &#8221;create&#8221; metoduna ihtiyacınız olacak.  &#8221;Create&#8221; metodunun üç parametreye ihtiyacı olacak, genel olarak sadece üçüncü</span></strong> <strong><span style="font-weight:normal;">parametreye gereksinim duycaksınız ki buda   System.Xml.XMlNode nesnesidir.  Elemanlar içerisindeki verilere ulaşmak için ise XmlNode.InnerText &#8216; i çağırabilirsiniz. </span></strong> <strong><span style="font-weight:normal;">Örneğin aşağıdaki Konsol uygulamasında, uygulamamızın .config dosyasında ki özel bölümden iki parametre okuyoruz ve ekranda gösteriyoruz. Ana metodun içinde özel ayarlara güçlü tipler kullanılarak ulaşılmış ve uygulamanın ayarlarının olduğu text düzenli şekilde parçalanmıştır. CustomConfigHandler sınıfına IConfigruationSectionHandler arayüzü dahil edilmiştir ve CustomConfigHandler.Create metodu .config dosyasından uygun bölümlerin ayarlarını okur ve değerleri özel MySettings sınıfının örneğine kaydeder.</span></strong></p>
<p>Uygulamamızın kodlarına geçmeden önce  uygulamamıza ait .config dosyasına bakalım.</p>
<p><strong>&lt;configuration&gt;</strong></p>
<p><strong>&lt;configSections&gt;</strong></p>
<p><strong> &lt;section name=&#8221;customSettings&#8221;  type=&#8221;ConfigApp.CustomConfigHandler, ConfigApp&#8221;/&gt;</strong></p>
<p><strong>&lt;/configSections&gt;</strong></p>
<p><strong>&lt;appSettings&gt;</strong></p>
<p><strong>&lt;add key=&#8221;Karsilama&#8221; value =&#8221;Merhaba Dunya&#8221;/&gt;</strong></p>
<p><strong>&lt;add key =&#8221;isim&#8221; value=&#8221;sanane&#8221;/&gt;</strong></p>
<p><strong>&lt;/appSettings&gt;</strong></p>
<p><strong>&lt;customSettings&gt;</strong></p>
<p><strong>&lt;sonKullanici&gt; erdal&lt;/sonKullanici&gt;</strong></p>
<p><strong>&lt;sonNumara&gt;123456&lt;/sonNumara&gt;</strong></p>
<p><strong>&lt;/customSettings&gt;</strong></p>
<p><strong>&lt;/configuration&gt;</strong></p>
<p>&lt;configSections&gt; bölümü, bölüm ismini belirtir(name özelliği için),  ve metoda IConfigurationSectionHandler ve  assmebly ismi (tip özelliğinin içinde) dahil edilmiştir. Daha sonra özel konfigurasyon bölümünde her eleman için özel değer verilmiştir. (sonKullanici, sonNumara). Konfigurasyon dosyasına baktığımızda CustomConfigHandler.Create metodunun hangi değerleri okuduğunu görürüz(&lt;appSettings&gt; bölümü sadece .config dosyasının hem application settingi hemde custom settingi içerebildiğini göstermek amacıyla eklenmiştir.) .config Dosyamızı &#8220;ConfigApp.config&#8221; olarak ve uygulamamızın isminide ConfigApp olarak yazıyoruz.</p>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">using System;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">using System.Collections.Generic;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">using System.Linq;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">using System.Text;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">using System.Configuration;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">namespace ConfigApp</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">{</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">public class MySettings</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">{</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">public string sonKullanici;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">public string sonNumara;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">public MySettings()</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">{</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">}</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">}</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">public class CustomConfigHandler : IConfigurationSectionHandler</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">{</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">public CustomConfigHandler()</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">{</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">}</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">public object Create(object parent, object configContext, System.Xml.XmlNode section)</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">{</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">MySettings settings = new MySettings();</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">settings.sonKullanici = section.SelectSingleNode(&#8220;sonKullanici&#8221;).InnerText;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">settings.sonNumara = section.SelectSingleNode(&#8220;sonNumara&#8221;).InnerText;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">return settings;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">}</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">}</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">class Program</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">{</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">static void Main(string[] args)</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">{</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">MySettings settings = (MySettings)ConfigurationManager.GetSection(&#8220;customSettings&#8221;);</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">Console.WriteLine(settings.sonKullanici);</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">Console.WriteLine(settings.sonNumara);</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">Console.Read();</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">}</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">}</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:723px;width:1px;height:1px;">}</div>
<p><strong>using System;</strong></p>
<p><strong>using System.Collections.Generic;</strong></p>
<p><strong>using System.Linq;</strong></p>
<p><strong>using System.Text;</strong></p>
<p><strong>using System.Configuration;</strong></p>
<p><strong><br />
</strong></p>
<p><strong>namespace ConfigApp</strong></p>
<p><strong>{</strong></p>
<p><strong> public class MySettings</strong></p>
<p><strong> {</strong></p>
<p><strong> public string sonKullanici;</strong></p>
<p><strong> public string sonNumara;</strong></p>
<p><strong> public MySettings()</strong></p>
<p><strong> {</strong></p>
<p><strong><br />
</strong></p>
<p><strong> }</strong></p>
<p><strong> }</strong></p>
<p><strong> public class CustomConfigHandler : IConfigurationSectionHandler</strong></p>
<p><strong> {</strong></p>
<p><strong> public CustomConfigHandler()</strong></p>
<p><strong> {</strong></p>
<p><strong><br />
</strong></p>
<p><strong> }</strong></p>
<p><strong> public object Create(object parent, object configContext, System.Xml.XmlNode section)</strong></p>
<p><strong> {</strong></p>
<p><strong> MySettings settings = new MySettings();</strong></p>
<p><strong> settings.sonKullanici = section.SelectSingleNode(&#8220;sonKullanici&#8221;).InnerText;</strong></p>
<p><strong> settings.sonNumara = section.SelectSingleNode(&#8220;sonNumara&#8221;).InnerText;</strong></p>
<p><strong> return settings;</strong></p>
<p><strong><br />
</strong></p>
<p><strong> }</strong></p>
<p><strong><br />
</strong></p>
<p><strong> }</strong></p>
<p><strong> class Program</strong></p>
<p><strong> {</strong></p>
<p><strong> static void Main(string[] args)</strong></p>
<p><strong> {</strong></p>
<p><strong> MySettings settings = (MySettings)ConfigurationManager.GetSection(&#8220;customSettings&#8221;);</strong></p>
<p><strong> Console.WriteLine(settings.sonKullanici);</strong></p>
<p><strong> Console.WriteLine(settings.sonNumara);</strong></p>
<p><strong> Console.Read();</strong></p>
<p><strong> }</strong></p>
<p><strong> }</strong></p>
<p><strong>}</strong></p>
<p><img class="alignnone size-full wp-image-46" title="configAppsonuc" src="http://aktenyazilim.files.wordpress.com/2009/06/configappsonuc.jpg" alt="configAppsonuc" width="540" height="95" /></p>
<p>Uygulamamızın sonucu resim de görüldüğü gibidir, bu yazımızda uygulamamızın .config dosyasına özel bölüm oluşturmayı ve bu bölümden değerler okumayı gördük. Sonraki yazımızda Özel bölümleri ConfiguraitonSection &#8216;ı kullanarak oluşturmayo göreceğiz. iyi günler</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aktenyazilim.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aktenyazilim.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aktenyazilim.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aktenyazilim.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aktenyazilim.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aktenyazilim.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aktenyazilim.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aktenyazilim.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aktenyazilim.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aktenyazilim.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aktenyazilim.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aktenyazilim.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aktenyazilim.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aktenyazilim.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aktenyazilim.wordpress.com&amp;blog=8264115&amp;post=44&amp;subd=aktenyazilim&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aktenyazilim.wordpress.com/2009/06/23/uygulamalarin-konfigurasyonu-6ozel-bolumler-olusturma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0737346e5454dedba60b39854cda655c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aktenyazilim</media:title>
		</media:content>

		<media:content url="http://aktenyazilim.files.wordpress.com/2009/06/configappsonuc.jpg" medium="image">
			<media:title type="html">configAppsonuc</media:title>
		</media:content>
	</item>
	</channel>
</rss>
