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

<channel>
	<title>C# &#8211; Gökhan Doğru</title>
	<atom:link href="https://www.gokhandogru.net/category/csharp/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.gokhandogru.net</link>
	<description>Sadece yazılımcıyım, format atmayı bilmiyorum.</description>
	<lastBuildDate>Tue, 17 Jan 2023 00:21:28 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.3</generator>

<image>
	<url>https://www.gokhandogru.net/wp-content/uploads/2019/12/cropped-Başlıksız-1-1-32x32.png</url>
	<title>C# &#8211; Gökhan Doğru</title>
	<link>https://www.gokhandogru.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Decorator Design Pattern Nedir?</title>
		<link>https://www.gokhandogru.net/decorator-design-pattern-nedir/</link>
					<comments>https://www.gokhandogru.net/decorator-design-pattern-nedir/#respond</comments>
		
		<dc:creator><![CDATA[Gökhan Doğru]]></dc:creator>
		<pubDate>Tue, 17 Jan 2023 00:20:00 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[decorator design nedir?]]></category>
		<category><![CDATA[decorator design pattern]]></category>
		<category><![CDATA[Decorator Design Pattern Nedir?]]></category>
		<category><![CDATA[decorator design pattern oop]]></category>
		<category><![CDATA[decorator pattern nedir?]]></category>
		<guid isPermaLink="false">https://www.gokhandogru.net/?p=904</guid>

					<description><![CDATA[Decorator design pattern, bir nesnenin özelliklerini ve davranışlarını dinamik olarak değiştirmek için kullanılan bir tasarım kalıbıdır. Bu tasarım kalıbı, bir sınıfın özelliklerini ve davranışlarını değiştirmek için başka bir sınıfın üstüne ekleme (decorate) yapmasını sağlar. C# dilinde, decorator pattern'i kullanmak için öncelikle bir arayüz (interface) veya bir temel sınıf tanımlanır. Daha sonra, bu arayüzü veya temel sınıfı kullanan decorator sınıfları oluşturulur.]]></description>
										<content:encoded><![CDATA[<p>Decorator design pattern, bir nesnenin özelliklerini ve davranışlarını dinamik olarak değiştirmek için kullanılan bir tasarım kalıbıdır. Bu tasarım kalıbı, bir sınıfın özelliklerini ve davranışlarını değiştirmek için başka bir sınıfın üstüne ekleme (decorate) yapmasını sağlar. C# dilinde, decorator pattern&#8217;i kullanmak için öncelikle bir arayüz (interface) veya bir temel sınıf tanımlanır. Daha sonra, bu arayüzü veya temel sınıfı kullanan decorator sınıfları oluşturulur. (<img class="alignnone" src="https://seeklogo.com/images/C/chatgpt-logo-02AFA704B5-seeklogo.com.png" alt="" width="16" height="16" />)</p>
<p>Şimdi Decorator yapısını göstereceğim örnekle daha iyi anlayacağınızı düşünüyorum 🙂</p>
<p>Örneğin, aşağıdaki gibi bir <strong>arayüz</strong> ve<strong> temel sınıf</strong> tanımlayabilirsiniz:<br />
<script src="https://gist.github.com/dgokhan/d807bfd57ce1275be98210dab3c06bd5.js"></script><script src="https://gist.github.com/dgokhan/cfb14c9bae4b43daf5070da61e5e796a.js"></script></p>
<p>Daha sonra, bu arayüzü kullanan <strong>decorator</strong> sınıfları oluşturabilirsiniz:<br />
<script src="https://gist.github.com/dgokhan/17b7120ddd978159ca4130163514109b.js"></script><script src="https://gist.github.com/dgokhan/62a15adb45b45172b74819faa26afb79.js"></script></p>
<p>Bu şekilde, SimpleCoffee nesnesi üzerine <strong>Americano</strong> veya <strong>Cappuccino</strong> eklemeleri yaparak nesnenin özelliklerini ve davranışlarını değiştirebilirsiniz.</p>
<p><img loading="lazy" class="hoverZoomLink alignnone wp-image-907 size-full" src="https://www.gokhandogru.net/wp-content/uploads/2023/01/Screenshot_5.png" alt="" width="540" height="155" srcset="https://www.gokhandogru.net/wp-content/uploads/2023/01/Screenshot_5.png 540w, https://www.gokhandogru.net/wp-content/uploads/2023/01/Screenshot_5-300x86.png 300w" sizes="(max-width: 540px) 100vw, 540px" /></p>
<p>Umarım konuyu anlaşılabilir bir şekilde sizlere anlatabilmişimdir.</p>
<p>Örnek proje halini aşağıda ki Github logosuna tıklayarak gidebilirsiniz;<br />
<a href="https://github.com/dgokhan/DotNET-Design-Patterns" target="_blank" rel="noopener"><img loading="lazy" class="alignnone wp-image-623 size-medium hoverZoomLink" src="https://www.gokhandogru.net/wp-content/uploads/2021/01/logo_github-300x113.png" sizes="(max-width: 300px) 100vw, 300px" srcset="https://www.gokhandogru.net/wp-content/uploads/2021/01/logo_github-300x113.png 300w, https://www.gokhandogru.net/wp-content/uploads/2021/01/logo_github.png 358w" alt="" width="300" height="113" /></a></p>
<div id="hzViewer" style="background: none; line-height: 0px; overflow: hidden; padding: 5px; position: absolute; z-index: 2147483647; visibility: hidden; opacity: 1; cursor: pointer; pointer-events: none; display: none;"></div>
<div id="hzViewer" style="background: none; line-height: 0px; overflow: hidden; padding: 10px 5px; position: absolute; z-index: 2147483647; visibility: visible; opacity: 1; top: 493px; left: 323px; width: auto; height: auto; cursor: pointer; pointer-events: none; display: none;"></div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gokhandogru.net/decorator-design-pattern-nedir/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Factory Method Design Pattern Nedir?</title>
		<link>https://www.gokhandogru.net/factory-method-design-pattern-nedir/</link>
					<comments>https://www.gokhandogru.net/factory-method-design-pattern-nedir/#respond</comments>
		
		<dc:creator><![CDATA[Gökhan Doğru]]></dc:creator>
		<pubDate>Sat, 14 Jan 2023 22:57:27 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[c# factory method design pattern]]></category>
		<category><![CDATA[design pattern factory]]></category>
		<category><![CDATA[factory design pattern nedir]]></category>
		<category><![CDATA[factory method design pattern]]></category>
		<category><![CDATA[factory method design pattern nedir?]]></category>
		<guid isPermaLink="false">https://www.gokhandogru.net/?p=898</guid>

					<description><![CDATA[Factory Method Design Pattern, bir sınıfın nesnelerinin oluşturulmasını, alt sınıflar tarafından gerçekleştirilen bir yöntemle yapmasını sağlar. Bu yöntem, oluşturulacak nesnenin türünü belirlemek için kullanılır. Bu desen, nesnenin oluşturulması sırasında kullanılan kodun kalabalık olmamasını ve nesnenin oluşturulması işlemlerinin değiştirilebilir olmasını sağlar. Örneğin, bir araba firmasının farklı farklı tipte araç oluşturmasını düşünebiliriz.]]></description>
										<content:encoded><![CDATA[<p>Factory Method Design Pattern, bir sınıfın nesnelerinin oluşturulmasını, alt sınıflar tarafından gerçekleştirilen bir yöntemle yapmasını sağlar. Bu yöntem, oluşturulacak nesnenin türünü belirlemek için kullanılır. Bu desen, nesnenin oluşturulması sırasında kullanılan kodun kalabalık olmamasını ve nesnenin oluşturulması işlemlerinin değiştirilebilir olmasını sağlar. Örneğin, bir araba firmasının farklı farklı tipte araç oluşturmasını düşünebiliriz. (<img loading="lazy" class="alignnone" src="https://seeklogo.com/images/C/chatgpt-logo-02AFA704B5-seeklogo.com.png" alt="" width="16" height="16" />)</p>
<p>Her arabada olabilecek/arabanın ortak özelliklerini belirttiğim <strong>Car</strong> adında bir <strong>abstract class</strong> oluşturuyorum.<br />
<script src="https://gist.github.com/dgokhan/775a1e779fa710e6444b54f05720f250.js"></script></p>
<p>Araba tiplerini, kalıtım sayesinde<strong> Car </strong>abstract sınıfından alarak <strong>Sedan</strong>, <strong>SUV</strong> ve <strong>Hatchback</strong> araç tiplerini oluşturuyorum.<br />
<script src="https://gist.github.com/dgokhan/c3b60ec0fb6e27dbc17d76884b6c970c.js"></script><br />
<script src="https://gist.github.com/dgokhan/e9ff5387cd534950b1c8e2278bd682e3.js"></script><br />
<script src="https://gist.github.com/dgokhan/5176d62a4aa2dea1c990ff5446c36ff2.js"></script></p>
<p>Programda oluşabilecek type hatalarını engellemek ve belirli tiplerin dışına çıkılmaması adına <strong>CarTypes</strong> adında bir <strong>enum</strong> oluşturuyorum.<br />
<script src="https://gist.github.com/dgokhan/83d359b7d38bf8357222683d7f0b063e.js"></script></p>
<p>Şimdi sıra geldi Factory&#8217;imizi oluşturmaya..<br />
<strong>CarFactory</strong> adında bir public class oluşturuyorum ve içine <strong>Create</strong> adında geriye <strong>Car</strong> modelinde değer döndüren bir method hazırlıyorum.<br />
<script src="https://gist.github.com/dgokhan/f8ee3573bfec3d23e911ab76d0c163b1.js"></script></p>
<p>* Koddan anlaşılacağı üzere, ben <strong>CarFactory</strong>&#8216;de <strong>Create</strong> methoduna Sedan tipini gönderdiğimde bana <strong>new Sedan();</strong> bloguna girip oluşturduğum nesnin artık <strong>Sedan</strong> yapısında;<br />
4 teker olacağını, sunroof ve elektrikli olmayacağının bilgisini vermiş oluyor.</p>
<p><script src="https://gist.github.com/dgokhan/e4cb5dd4e8dc9dd4b652babaee106610.js"></script></p>
<p>Şimdi bakalım Fabrikamız gerçekten bir Sedan arabamı üretmiş? 🙂<br />
<img loading="lazy" class="size-medium wp-image-899 hoverZoomLink" src="https://www.gokhandogru.net/wp-content/uploads/2023/01/Screenshot_3-300x140.png" alt="factory method design pattern" width="300" height="140" srcset="https://www.gokhandogru.net/wp-content/uploads/2023/01/Screenshot_3-300x140.png 300w, https://www.gokhandogru.net/wp-content/uploads/2023/01/Screenshot_3.png 337w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Eğer Factory.Create&#8217;içine Hatchback gönderirseniz; Sunroof&#8217;ı olmayan, elektrikli ve 4 tekerlekli bir araba üretecektiniz 🙂</p>
<p>Umarım konuyu anlaşılabilir bir şekilde sizlere anlatabilmişimdir.</p>
<p>Örnek proje halini aşağıda ki Github logosuna tıklayarak gidebilirsiniz;<br />
<a href="https://github.com/dgokhan/DotNET-Design-Patterns" target="_blank" rel="noopener"><img loading="lazy" class="alignnone wp-image-623 size-medium hoverZoomLink" src="https://www.gokhandogru.net/wp-content/uploads/2021/01/logo_github-300x113.png" alt="" width="300" height="113" srcset="https://www.gokhandogru.net/wp-content/uploads/2021/01/logo_github-300x113.png 300w, https://www.gokhandogru.net/wp-content/uploads/2021/01/logo_github.png 358w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gokhandogru.net/factory-method-design-pattern-nedir/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Repository Pattern Nedir? Neden Kullanmalıyız?</title>
		<link>https://www.gokhandogru.net/repository-pattern-nedir-neden-kullanmaliyiz/</link>
					<comments>https://www.gokhandogru.net/repository-pattern-nedir-neden-kullanmaliyiz/#respond</comments>
		
		<dc:creator><![CDATA[Gökhan Doğru]]></dc:creator>
		<pubDate>Mon, 23 Mar 2020 17:42:07 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# pattern design]]></category>
		<category><![CDATA[c# repository pattern]]></category>
		<category><![CDATA[pattern design]]></category>
		<category><![CDATA[repository pattern design]]></category>
		<guid isPermaLink="false">http://gokhandogru.net/?p=365</guid>

					<description><![CDATA[Yazılım merakını dindiremeyip, ileri düzey konularını araştıran her insan mutlaka Design Pattern kavramıyla karşı karşıya gelirler. Yazılım hayatında birden fazla design olsa da asıl önemli olan hangi Design Pattern'i hangi zamanda ve onu nasıl kullanacağımızdır. Repository Pattern, Builder Design Pattern, Adapter Pattern, Command Design Pattern gibi birçok dizaynları görüp karşı karşıya geleceksiniz. Peki bunlardan Repository Pattern nedir? neden ve nasıl kullanmalıyız gelin hep birlikte incelemiş olalım...]]></description>
										<content:encoded><![CDATA[
<p>Eyyoo eyyoo herkese selamlar…<br><br>Yazılım merakını dindiremeyip, ileri düzey konularını araştıran her insan mutlaka <strong>Design</strong> <strong>Pattern</strong> kavramıyla karşı karşıya gelirler. Yazılım hayatında birden fazla design olsa da asıl önemli olan hangi Design Pattern&#8217;i hangi zamanda ve onu nasıl kullanacağımızdır. <strong>Repository Pattern</strong>, Builder Design Pattern, Adapter Pattern, Command Design Pattern gibi birçok dizaynları görüp karşı karşıya geleceksiniz. Peki bunlardan <strong>Repository Pattern </strong>nedir? neden ve nasıl kullanmalıyız gelin hep birlikte incelemiş olalım&#8230;<br><br>Konuyu anlatmadan önce unutmayalım ki.. Nesne yönelimli programalanın (OOP) amaçlarından biri; benzer kodları tekrar tekrar yazmak yerine <strong>bir yere yazıp onu kullanmaktır.&nbsp;</strong> Yani benzer kodları tekrar yazmaktan bizi kurtararak hem projemizin kodunun anlaşılır olmasını hemde zamandan tasarruf etmemize neden olur. <br><br># <strong>Peki Repository Pattern nedir ve neden kullanırız?</strong></p>



<p>&#8220;Veri merkezli uygulamalarda veriye erişimin ve yönetimin tek noktaya indirilmesini sağlayan yapıya <strong>Repository Pattern </strong>denir.&#8221;<br><strong>*</strong>Yani OOP mantığında da söylediğimiz gibi kod tekrarı olmadan, saf ve temiz bir şekilde <strong>veritabanı işlemlerinin</strong> tek bir noktadan kontrol edip, yönetilmesini <strong>Repository Pattern </strong>ile sağlıyoruz. </p>



<p><strong># Peki Repository Pattern faydaları nelerdir?</strong></p>



<ul><li>Projede değişiklikler yapıldığında kolayca yönlendirilebilir olması,</li><li>Esnek bir mimari yapıda olması,</li><li>Unit-Test yapabilmemizi kolaylaştırması,</li><li>Veri işlemlerinde ki hataları görmemizi kolaylaştırır.</li></ul>



<p>Şimdi yapacağımız örnekle birlikte kafamızda oluşan yapıyı sağlam bir şekilde oturmasını sağlıyalım.. 🙂<br><br>Örneğimiz şu şekilde; <br>Xamarin ile yapılan bir mobil restaurant uygulaması düşünelim&#8230; Uygulamamız veri(stok,masa,fiş,adisyon vb.) bilgilerini dışardan API yardımıyla SQL&#8217;den alıyor ve ekrana basıyor. <br>Eğer <strong>Repository Pattern</strong> bilmeseydik; Arka planda her SQL CRUD işlemleri için ayrı ayrı classlar ve ayrı ayrı metodlar yazıcaktık. Buda bize çok fazla efor ve zaman kaybı yaratacaktı. Fakat <strong>Repository Pattern</strong> ile birden fazla veri işlemlerini tek bi çatı altından yapacağız.</p>



<p>Şimdi projeye <strong>Repository</strong> klasörünü açıp içine <strong>BaseRepository</strong> adı altında bir class açıp interfacemizide tanımlayıp kodlarımızı yazmaya başlıyoruz.</p>



<figure class="wp-block-image"><img loading="lazy" width="220" height="80" src="http://gokhandogru.net/wp-content/uploads/2020/03/image.png" alt="" class="wp-image-366"/></figure>



<p><strong>IBaseRepository</strong> interface&#8217;de kullanacağımız metodların imzalarını oluşturup bırakıyoruz&#8230;</p>



<script src="https://gist.github.com/heRanarchy/79fe18c9e4406c9630168b323d408b75.js"></script>



<p>Interface&#8217;lerimizi tanımladıktan sonra ana classımıza implement edip içlerine sunucumuzdan çekilecek verilerin <strong>HttpWebRequest </strong>&#8216;lerimizi oluşturuyoruz.<br>Ben anlamanız için sadece <strong>ReadAll </strong>ve <strong>ReadById </strong>metodlarını göstereceğim create,update,delete işlemini sizlere bırakıyorum:)</p>



<script src="https://gist.github.com/heRanarchy/c4e29437affead5a18df6a6342b15e08.js"></script>



<p>Repository metodlarını tamamladığımıza göre artık kategori,stok,ürün,adisyon vb. veri işlemlerinde tek bir noktadan istek gönderip, gelecek cevabı beklemek kalıyor..</p>



<p>Örnek; <strong>Kategoriler</strong> tablosunu istiyorum; </p>



<script src="https://gist.github.com/heRanarchy/784683d33673fc5aa5bc412d27cd4554.js"></script>



<figure class="wp-block-image"><img loading="lazy" width="579" height="410" src="http://gokhandogru.net/wp-content/uploads/2020/03/image-3.png" alt="" class="wp-image-383" srcset="https://www.gokhandogru.net/wp-content/uploads/2020/03/image-3.png 579w, https://www.gokhandogru.net/wp-content/uploads/2020/03/image-3-300x212.png 300w" sizes="(max-width: 579px) 100vw, 579px" /></figure>



<p>Gördüğünüz gibi <strong>result</strong> değişkenimin içine baktığım da 6tane verimin geldiğini görüyorum. API&#8217;den diğer verileri çekmek için <strong>.ReadAll(&#8220;Kategoriler&#8221;); </strong>&#8216;de parantez içinde ki valueyi değiştirmemiz yeterli. Nasıl mı ? buyrun örnekler;<br><br><strong>Stoklar</strong> tablosunu istiyorum -&gt;   string query = await baseRepo.ReadAll(&#8220;<strong>Stoklar</strong>&#8220;);<br><strong>Adisyon</strong> tablosunu istiyorum -&gt;   string query = await baseRepo.ReadAll(&#8220;<strong>Adisyon</strong>&#8220;);<br><strong>Masalar</strong> tablosunu istiyorum -&gt;   string query = await baseRepo.ReadAll(&#8220;<strong>Masalar</strong>&#8220;); gibi gibi..<br><br># Peki ben <strong>Masalar</strong> tablosundan hepsini değilde sadece <strong>ID</strong> numarası <strong>35</strong> olan masayı istiyorum nasıl getirebilirim?<br><br>Bu sefer .<strong>ReadAll</strong> yerine .<strong>ReadById</strong> kullanacağız.. buyrun;</p>



<script src="https://gist.github.com/heRanarchy/7efb4c4e01ee48e8653bfa0d4b7a7a99.js"></script>



<p>Diğer delete/update/create işlemlerinide sizlere bırakıyorum. Zaten mantığı anladıysanız gerisi çok sabit 🙂<br><br>Bir yazımızın daha sonuna geldik.. <br>Umarım projelerinizde sık sık Repository Design kullanır ve sevdiklerinize kullanımını tavsiye edersiniz. Unutmayın ki çalışacağınız firmalarda, büyük projelerde Repository Design çok fazla karşınıza gelecektir. Ben örneğimde sadece veri işlemleri için kullandım. Repoyu çok farklı yerlerde, işlerinizi hafifletmeniz için kullanabilirsiniz.<br><br>Herkese bol mantıklı kodlamalar 🙂</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gokhandogru.net/repository-pattern-nedir-neden-kullanmaliyiz/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>C# Windows Form Hata Geri Bildirimi</title>
		<link>https://www.gokhandogru.net/csharp-olasi-durumlarda-hata-geri-bildirimi/</link>
					<comments>https://www.gokhandogru.net/csharp-olasi-durumlarda-hata-geri-bildirimi/#respond</comments>
		
		<dc:creator><![CDATA[Gökhan Doğru]]></dc:creator>
		<pubDate>Fri, 27 Dec 2019 14:43:00 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[c# hata bildirimi]]></category>
		<category><![CDATA[c# windows form hata bildirimi]]></category>
		<category><![CDATA[windows form hata geri bildirimi]]></category>
		<guid isPermaLink="false">http://gokhandogru.net/?p=306</guid>

					<description><![CDATA[Eyyoo eyyoo herkese selamlar…. Satışa sunduğumuz program bazen bilinmedik sebeplerden dolayı kendini kapatabilir veya diğer sebeplerden dolayı sorunlar çıkartabilir. Bu ve buna benzer durumlarda müşterinin bilgisayarına bağlanıp kontrol etmek biraz profesyonellik dışı olduğu için müşterinin aldığı hatayı otomatik olarak bize mail attırabilir veya hata dosyasını kaydettirebiliriz. Nasıl mı? Buuuyyrunnnn; İlk önce Program.cs &#8216;de ki Main...<p><a class="read-more" href="https://www.gokhandogru.net/csharp-olasi-durumlarda-hata-geri-bildirimi/">Read More</a></p>]]></description>
										<content:encoded><![CDATA[
<p>Eyyoo eyyoo herkese selamlar….<br><br>Satışa sunduğumuz program bazen bilinmedik sebeplerden dolayı kendini kapatabilir veya diğer sebeplerden dolayı sorunlar çıkartabilir. Bu ve buna benzer durumlarda müşterinin bilgisayarına bağlanıp kontrol etmek biraz profesyonellik dışı olduğu için müşterinin aldığı hatayı otomatik olarak bize mail attırabilir veya hata dosyasını kaydettirebiliriz. Nasıl mı? Buuuyyrunnnn;<br><br>İlk önce <strong>Program.cs &#8216;</strong>de ki<strong> Main </strong>classına bir hata yakalayıcısı ekliyorum.<br><br><code>Application.ThreadException += new ThreadExceptionEventHandler(ErrorThread);</code></p>



<pre class="wp-block-code"><code>
static void Main()
{
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.ThreadException += new ThreadExceptionEventHandler(ErrorThread);
     Application.Run(new frmLogin());
}</code></pre>



<p>Şimdi hata durumunda tetiklenecek olan <strong>ErrorThread </strong>eventini oluşturuyorum;</p>



<pre class="wp-block-code"><code>
private static void ErrorThread(object sender, ThreadExceptionEventArgs e)
{
    File.AppendAllText(Application.StartupPath + "\\error.txt",
        "\nHata Zamanı:" + DateTime.Now +
        "\nHata Nedeni:" + e.Exception.Message);
}</code></pre>



<p>Hatanın ne olduğunu anlayabilmem için <strong>ThreadExceptionEventArgs </strong>içinde bulunan <strong>Exception.Message</strong> ifadesini hata nedeni olarak gösteriyorum&#8230;<br><br>Şimdi programımız olası bir hata durumunda<strong> .exe</strong>&#8216;nin bulunduğu yere<strong> error.txt</strong> diye bir metin belgesi oluşturup dakika dakika kaydettiğini görebilirsiniz 🙂</p>



<figure class="wp-block-image is-resized"><img loading="lazy" src="http://gokhandogru.net/wp-content/uploads/2019/12/image.png" alt="" class="wp-image-312" width="523" height="209" srcset="https://www.gokhandogru.net/wp-content/uploads/2019/12/image.png 523w, https://www.gokhandogru.net/wp-content/uploads/2019/12/image-300x120.png 300w" sizes="(max-width: 523px) 100vw, 523px" /></figure>



<p>Peki.. hatayı mail olarak göndermek istiyorsak ne yapmalıyız diyorsanız çözümü çok basit.. hemen projeme <strong>sendMail </strong>adında bir class açıyorum..</p>



<pre class="wp-block-code"><code>
public static void Process(string _hataNedeni)
{
        SmtpClient sc = new SmtpClient();
        sc.Port = 587;
        sc.Host = "smtp.gmail.com";
        sc.EnableSsl = true;

        sc.Credentials = new NetworkCredential("eposta@gmail.com", "gmail_sifre");

        MailMessage mail = new MailMessage();

        mail.From = new MailAddress("eposta@gmail.com", "Ekranda Görünecek İsim");

        mail.To.Add("alici1@mail.com"); 

        mail.Subject = "Programda hata oluştu!";
        mail.IsBodyHtml = true;
        mail.Body = "\nHata Zamanı:" + DateTime.Now +
                  "\nHata Nedeni:" + _hataNedeni; 

        sc.Send(mail);
}</code></pre>



<p>Bu sefer metin belgesi kodumu siliyorum ve mail göndermeyi tetiklettiriyorum.</p>



<pre class="wp-block-code"><code>
private static void ErrorThread(object sender, ThreadExceptionEventArgs e)
{
     sendMail.Process(e.Exception.Message);
}</code></pre>



<p>Programı hataya düşürdüğüm zaman gördüğünüz gibi otomatik olarak mail hesabıma düştü 🙂</p>



<figure class="wp-block-image"><img loading="lazy" width="1024" height="84" src="http://gokhandogru.net/wp-content/uploads/2019/12/image-1-1024x84.png" alt="" class="wp-image-317" srcset="https://www.gokhandogru.net/wp-content/uploads/2019/12/image-1-1024x84.png 1024w, https://www.gokhandogru.net/wp-content/uploads/2019/12/image-1-300x25.png 300w, https://www.gokhandogru.net/wp-content/uploads/2019/12/image-1-768x63.png 768w, https://www.gokhandogru.net/wp-content/uploads/2019/12/image-1-1038x86.png 1038w, https://www.gokhandogru.net/wp-content/uploads/2019/12/image-1.png 1049w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Bu konumuzda bu kadar eğer projelerinizde neler olup bittiğini öğrenmek istiyorsanız bu kısa yolu kullanarak öğrenebilirsiniz. <br>Herkese bol mantıklı kodlamalar 🙂</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gokhandogru.net/csharp-olasi-durumlarda-hata-geri-bildirimi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>C# Veri Kapsülleme (Class Encapsulation) {Get/Set Mevzuları}</title>
		<link>https://www.gokhandogru.net/veri-kapsulleme-class-encapsulation/</link>
					<comments>https://www.gokhandogru.net/veri-kapsulleme-class-encapsulation/#respond</comments>
		
		<dc:creator><![CDATA[Gökhan Doğru]]></dc:creator>
		<pubDate>Sat, 21 Dec 2019 11:47:08 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[c# get set]]></category>
		<category><![CDATA[get set nedir]]></category>
		<category><![CDATA[veri kapsülleme]]></category>
		<guid isPermaLink="false">http://gokhandogru.net/?p=175</guid>

					<description><![CDATA[c# get set nedir?]]></description>
										<content:encoded><![CDATA[
<p>Eyyoo eyyoo herkese selamlar…<br>Bugün sizlere github&#8217;da ki projelere bakınca &#8216;<strong>bu değişkenlere neden sadece int veya string diye bırakmıyoruz?/niye get-set ile uğraşıyoruz?/nedir bu get-set?</strong>&#8221; dedirten veri kapsüllemeyi inceleyip, nasıl kullanılacağını örnekleriyle birlikte sizlere anlatmaya çalışacağım.<br><br><strong>Kapsülleme</strong>, sınıf içindeki değişkenlere erişimi kaldırmak ya da kısıtlamak için kullanılır. Önemli bir değişkeni&nbsp;<strong>public&nbsp;</strong>olarak tanımlamak, değişkene yazılımcı tarafından -bilinçli ya da bilinçsiz- müdahaleye açık hale getirir. Bu da sınıf içindeki metodların çalışmasını olumsuz etkileyebilir. Bu gibi durumların önüne geçmek için kapsülleme tekniği kullanılmaktadır.(<a rel="noreferrer noopener" aria-label=" (yeni sekmede açılır)" href="http://safkaninsan.blogspot.com/" target="_blank">*1</a>)</p>



<p>Yanii.. <strong>Get</strong> ve <strong>Set </strong>metodlarını birer kontrol mekanizması olarak düşünebiliriz . Kod blokları arasında oluşabilecek hataları önceden engelleyen &#8220;hoopp hemşerim nereye&#8221; diyen bodyguard&#8217;ımız 🙂 tabi sadece hataları engellemek için değil, diğer istediğimiz limitlemeleri, koşul kontrollerini de get &amp; set içinden yapabiliriz.<br><br><strong>Bilmemiz gereken bilgiler;<br></strong>• get : Kapsül içindeki verileri okumamız için çalışan metod. (Get -&gt; <strong>Get</strong>ir olarak aklınızda kalabilir)<br>• set :  Kapsüle veri göndereceğimiz zaman kullanacağımız metod.<br>• value : Kapsüle dışardan gelen veriyi incelemek veya atama yapacağımız zaman kullanacağımız anahtar kelime,<br>• return : Geriye bir değer döndürmemize yardımcı olan anahtar kelime.<br><br><strong>Örneğin nerelerde Get&amp;Set kullanabiliriz?</strong><br>&#8211; Kimlik numarasına harf ataması yapılmasını engelleme durumunda,<br>&#8211; Belirli bir kritere uygun olup olmamasını kontrol ettirme gibi durumlarla örneklendirebiliriz..<br><br><strong>Şimdi birlikte kısa bir örnek yapalım;<br></strong>Hedefimiz şu :  Kullanıcıdan bir TC kimlik numarası isteyeceğiz ve TC numarasını tekrar çağırdığımızda ilk 4 hanesini görüp geri kalanını yıldız (*) ile gizleyeceğiz. <br>(benzeri örnek: 16haneli kredi kartı bilgisinin ilk 4 hanesini görüp kalanının *** olması gibi..)<br><br>İlk önce <strong>Personel.cs</strong> olarak bir class açıyorum ve malzemelerimi yavaş yavaş ekliyorum;<br>1-) _tckimlikNumarasi adında uzaklardan erişimi olmayan bir private değişken oluşturuyorum. <br>2-) tckimlikNumarasi adında her yerden erişilebilen, gelen veriyi _tckimlikNumarasi &#8216;e aktaracak bir kapsül oluşturuyorum.</p>



<pre class="wp-block-code"><code>
public class Personel
    { 
        private string _tckimliknumarasi; 
        public string tckimlikNumarasi{ get; set; }  
    }</code></pre>



<p>*  <strong>_tckimliknumarasi </strong>olarak açılan değişkenim <strong>private </strong>olduğu için diğer classlardan erişimi <strong>olmayacaktır</strong>.  Veri gönderdiğim zaman bütün iş yükü <strong>tckimlikNumarasi</strong> &#8216;nin <strong>set </strong>bloğu arasında olacaktır. </p>



<p>Şimdi projeye geri dönersek; İlk önce kullanıcıdan gelen TC numarasının boş olup olmadığını daha sonrasında da 11 haneli olup olmadığını kontrol edeceğiz. Eğer kriterlere uyuyorsa hata mesajım çıkacak, uymuyorsa direk <strong>else </strong>bölümüne geçip <strong>_tckimliknumarasi </strong>değişkenine verimi atayacağım.  </p>



<pre class="wp-block-code"><code>
public string tckimlikNumarasi
        {
            get { return _tckimliknumarasi;  }
            set
            {
                if (String.IsNullOrEmpty(value) || value.Length != 11) 
                {
                    Console.WriteLine("Lütfen 11 haneli TC numaranızı giriniz!");
                }
                else
                {
                    _tckimliknumarasi = value;
                }
            }
        }</code></pre>



<p>* Şimdi <strong>set </strong>tarafımdaki koşullarım bitti, hemen <strong>get </strong>tarafını kodlamaya başlıyorum. <br><br><strong>Get </strong>tarafında ki amacım neydi? <strong>tckimlikNumarasi</strong> çağırdığım zaman 11 hanenin ilk 4hanesini gösterip 7haneyi yıldız yapmaktı&#8230; </p>



<p>Hatırlarsanız <strong>string </strong>değerlerin belirli bir aralığını almak istiyorsak <strong>Substring </strong>kullanıyorduk. O yüzden <strong>_tckimliknumarasi </strong>değişkenime <strong>0,4 Substring</strong>i uygulayıp sonuna da yıldızlarımı ekledim mi istediğim her şey olmuş olacak 🙂</p>



<pre class="wp-block-code"><code> 
 get
 {  
     _tckimliknumarasi = _tckimliknumarasi.Substring(0, 4) + "*******";
     return _tckimliknumarasi;
 }</code></pre>



<p>Personel.cs tarafım hazır,<strong> Program.cs</strong> tarafına geçip <strong>per </strong>adında Personel classını üretiyorum.</p>



<pre class="wp-block-code"><code> Personel per = new Personel();</code></pre>



<p>Artık işim personele tc numarası atamak ve tc numarasını çağırmak&#8230;</p>



<pre class="wp-block-code"><code>
 Personel per = new Personel();
 per.tckimlikNumarasi = "62411867016";

 Console.WriteLine(per.tckimlikNumarasi);</code></pre>



<p>Kodumuzu şimdi inceleyelim bakalım;</p>



<p><img loading="lazy" width="750" height="234" class="wp-image-268" style="width: 750px;" src="http://gokhandogru.net/wp-content/uploads/2019/12/Screenshot_1.png" alt="" srcset="https://www.gokhandogru.net/wp-content/uploads/2019/12/Screenshot_1.png 750w, https://www.gokhandogru.net/wp-content/uploads/2019/12/Screenshot_1-300x94.png 300w" sizes="(max-width: 750px) 100vw, 750px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gokhandogru.net/veri-kapsulleme-class-encapsulation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
