﻿
{"id":298,"date":"2012-03-21T00:51:36","date_gmt":"2012-03-21T00:51:36","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=298"},"modified":"2012-05-28T12:57:50","modified_gmt":"2012-05-28T12:57:50","slug":"cta-generic-new-constraint","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-generic-new-constraint\/","title":{"rendered":"C# Generic New Constraint"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131mda C#&#8217;ta Generic New Constraint&#8217;ten bahsedece\u011fim.<br \/>\n<!--more--><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nclass Gen&lt;T&gt;\r\n{\r\nT t1;\r\npublic Gen()\r\n{\r\nthis.t1 = new T();\r\n}\r\n}\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu Visual Studio derleyicisine ge\u00e7irip, derledikten sonra hatayla kar\u015f\u0131la\u015facaks\u0131n\u0131z.<br \/>\nZaten derleyici &#8221; new T(); &#8221; komutunun alt\u0131n\u0131da k\u0131rm\u0131z\u0131yla \u00e7izecektir.Bu hatan\u0131n sebebi nedir?\u0130\u015fte bu sorunun \u00e7\u00f6z\u00fcm\u00fcne Generic New Constraint deniyor.<br \/>\nE\u011fer T i\u00e7in bu Generic class i\u00e7inde bir nesne yarat\u0131p ba\u011flamak istiyorsak, new kelimesi ile nesne olu\u015fturmas\u0131na default olarak izin verilmez.Bu izni sa\u011flamak i\u00e7in &#8221; where T : new() &#8221; ifadesini class tan\u0131m\u0131na eklemeliyiz.<br \/>\n\u015eimdi bu &#8221; new T(); &#8221; kodunda hata vermesinin sebebini sorgulayal\u0131m..<br \/>\nBiliyoruzki T parametresi d\u0131\u015fardan alaca\u011f\u0131 de\u011fere g\u00f6re bir tip olacakt\u0131r.\u00d6rn;Benim elimde Araba.cs s\u0131n\u0131f\u0131 olsun ve ben bu Araba s\u0131n\u0131f\u0131na bir parametre alan constructor yaz\u0131y\u0131m.Do\u011fal olarak bo\u015f constructor eziliyor.Yani Araba s\u0131n\u0131f\u0131ndan nesne olu\u015ftururken new Araba() diyip olu\u015fturamayaca\u011f\u0131m.\u00c7\u00fcnk\u00fc Araba s\u0131n\u0131f\u0131nda parametre alan constructor mevcuttur.Default bo\u015f constructor\u0131 bu parametre alan constructor ezmektedir.Bende elimle bo\u015f constructor yazmad\u0131\u011f\u0131m i\u00e7in &#8220;new Araba()&#8221; \u015feklinde nesne olu\u015fturamayaca\u011f\u0131m.\u0130\u015fte bu tarzdaki Araba s\u0131n\u0131f\u0131m\u0131 T ye verirsem e\u011fer, &#8220;new T() -&gt; new Araba()&#8221; olacakt\u0131r.\u0130\u015fte bu olas\u0131 durumdan ka\u00e7\u0131nmak i\u00e7in, .NET taraf\u0131ndan bu durumun \u00f6nlemi al\u0131nm\u0131\u015ft\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Gen&lt;T&gt; where T:new()\r\n    {\r\n        T t1;\r\n        public Gen()\r\n        {\r\n            this.t1 = new T();\r\n        }\r\n    }\r\n<\/pre>\n<p>Art\u0131k kodumuzu yukar\u0131daki gibi d\u00fczeltirsek, yani class imzas\u0131na &#8220;where T:new()&#8221; kodunu eklersek program hata vermeyecektir.<\/p>\n<p>\u015eunlar\u0131da s\u00f6ylemek isterim.<br \/>\nBir Generic class i\u00e7inde birden fazla constraint ayn\u0131 anda bildirilebilir.Yani hem Base class, hem de new constrainti olabilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Gen&lt;T&gt; where T:Araba where T:new()\r\n    {\r\n\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, birden fazla constraint yaz\u0131lacaksa, new constraint en sonra olmal\u0131d\u0131r.<\/p>\n<p>Bu yaz\u0131m\u0131nda sonuna gelmi\u015f olduk.Bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere..<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131mda C#&#8217;ta Generic New Constraint&#8217;ten bahsedece\u011fim.<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[110,145,177],"class_list":["post-298","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","tag-constraint","tag-generic","tag-new-constraint"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/298","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=298"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/298\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}