{"id":18263,"date":"2021-10-08T18:07:37","date_gmt":"2021-10-08T15:07:37","guid":{"rendered":"https:\/\/mobidictum.com\/?p=18263"},"modified":"2023-04-25T10:49:51","modified_gmt":"2023-04-25T07:49:51","slug":"unity-3d-nesne-yonelimli-programlama-class-nedir","status":"publish","type":"post","link":"https:\/\/mobidictum.com\/tr\/unity-3d-nesne-yonelimli-programlama-class-nedir\/","title":{"rendered":"Unity 3D ile Nesne Y\u00f6nelimli Programlama 02: Class Nedir?"},"content":{"rendered":"\n<p><strong>Class<\/strong>, <strong>Object<\/strong> (Nesne) ile birlikte, nesne y\u00f6nelimli programlaman\u0131n (OOP) en temel \u00f6\u011fesidir. <strong>Class (S\u0131n\u0131f)<\/strong>, nesnelerimizin \u00f6zelliklerini ve i\u015flevlerini i\u00e7inde bar\u0131nd\u0131r\u0131r. Her s\u0131n\u0131f bir nesnedir. S\u0131n\u0131flar sayesinde yazd\u0131\u011f\u0131m\u0131z programlar par\u00e7alara ayr\u0131l\u0131r ve defalarca kullanabiliriz. Bir s\u0131n\u0131f, \u00e7al\u0131\u015fma esnas\u0131nda (Run Time) bellekte kendine ait bir yer olu\u015fturur ve o nesneye, o nesnenin alanlar\u0131na bellekte olu\u015fan adresi \u00fczerinden eri\u015fip de\u011fi\u015ftirebiliriz.<\/p>\n\n\n\n\n\n<p>(<em>Ara\u015ft\u0131rma i\u00e7in anahtar kelimeler: Memory Management, Garbage Collector, Stack, Heap<\/em>)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"629\" height=\"599\" src=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/10\/OOP-Class.png\" alt=\"OOP \u015femas\u0131\" class=\"wp-image-18281\" srcset=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/10\/OOP-Class.png 629w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/10\/OOP-Class-600x571.png 600w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/10\/OOP-Class-300x286.png 300w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/10\/OOP-Class-380x362.png 380w\" sizes=\"(max-width: 629px) 100vw, 629px\" \/><figcaption>OOP \u015femas\u0131<\/figcaption><\/figure>\n\n\n\n<p>Her s\u0131n\u0131f\u0131n kendi sorumluluk alan\u0131 vard\u0131r. Ba\u015fka bir nesnenin yapaca\u011f\u0131 i\u015flerin sonucuyla ilgilenebilir fakat onun i\u015flerini kendi i\u00e7erisinde yapmamal\u0131d\u0131r. Bir s\u0131n\u0131f, i\u00e7erisinde a\u015fa\u011f\u0131daki \u00f6\u011feleri bar\u0131nd\u0131rabilir:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Constructor<\/li><li>Fileds<\/li><li>Methods<\/li><li>Properties<\/li><li>Events<\/li><li>Delegates<\/li><\/ul>\n\n\n\n<p>Bir s\u0131n\u0131f\u0131 en basit \u015fekliyle a\u015fa\u011f\u0131daki gibi yazar\u0131z:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n}\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Access Modifiers (Eri\u015fim Belirleyicileri)<\/h2>\n\n\n\n<p>Class (S\u0131n\u0131f) i\u00e7erisindeki bu \u00f6\u011felerin eri\u015fim belirleyicileri (Access Modifiers) vard\u0131r. Bu eri\u015fim belirleyicileri be\u015fe ayr\u0131l\u0131r:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Private<\/li><li>Public<\/li><li>Protected<\/li><li>Internal<\/li><li>Protected Internal<\/li><\/ul>\n\n\n\n<p>Bunlardan \u015fimdilik sadece \u201cPublic\u201d ve \u201cPrivate\u201d\u0131 bilip di\u011ferlerine ileride de\u011finece\u011fiz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Public Access Modifier<\/strong> <\/h3>\n\n\n\n<p>S\u0131n\u0131f i\u00e7erisindeki bir  \u201cfield\u201d veya metodun (method) \u201cpublic\u201d olmas\u0131, o field veya metodun di\u011fer s\u0131n\u0131flar\u0131n eri\u015fimine a\u00e7\u0131k oldu\u011funu ifade eder. K\u0131sacas\u0131 eri\u015fim d\u0131\u015far\u0131ya a\u00e7\u0131k demektir.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Private  <strong>Access Modifier<\/strong> <\/strong> <\/h3>\n\n\n\n<p>S\u0131n\u0131f i\u00e7erisindeki bir alan \u201cfield\u201d veya metodun (method) \u201cprivate\u201d olmas\u0131, o field veya metodun di\u011fer s\u0131n\u0131flar\u0131n eri\u015fimine kapal\u0131 oldu\u011funu ifade eder. K\u0131sacas\u0131 eri\u015fim d\u0131\u015far\u0131ya kapal\u0131 demektir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Field<\/h2>\n\n\n\n<p>S\u0131n\u0131f (Class) i\u00e7erisinde ili\u015fkilendirilmi\u015f de\u011fi\u015fkenlerdir. Her de\u011fi\u015fken, verinin tipi ve eri\u015fim seviyesi ile birlikte tan\u0131mlan\u0131r. De\u011fi\u015fken ismi, tuttu\u011fu veriyi ifade edecek \u015fekilde ve anla\u015f\u0131l\u0131r olmal\u0131d\u0131r. Eri\u015fim seviyesi yaz\u0131lmayan field\u2019ler varsay\u0131lan olarak <strong>private<\/strong> olarak tan\u0131mlan\u0131r.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\t\/\/ private eri\u015fim seviyesinde\n\t\t\/\/ string de\u011fi\u015fken tipinde\n\t\tstring _name;\n\n\t\t\/\/ private eri\u015fim seviyesinde \n\t\t\/\/ bool de\u011fi\u015fken tipinde\n\t\tprivate bool _isHungry;\n\t\t\n\t\t\/\/ public eri\u015fim seviyesinde\n\t\t\/\/ bool de\u011fi\u015fken tipinde\n\t\tpublic bool _isSleep;\n}\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Method<\/h2>\n\n\n\n<p>S\u0131n\u0131flarda yapmak istedi\u011fimiz belli i\u015fleri bir araya getiren yap\u0131lara \u201cmethod\u201d (metot) denir. Bir metot yazarken metoda verece\u011fimiz isim o metotta yap\u0131lacak i\u015fi anlatan, sizin d\u0131\u015f\u0131n\u0131zda birinin bu metodun ismini g\u00f6rd\u00fc\u011f\u00fcnde ne yapt\u0131\u011f\u0131na dair bir fikrinin olaca\u011f\u0131 \u015fekilde olmal\u0131d\u0131r. Bir metot yaz\u0131l\u0131rken geri d\u00f6n\u00fc\u015f tipi belirtilir. (\u201cConstructor method\u201dlarda geri d\u00f6n\u00fc\u015f de\u011feri yaz\u0131lmaz.)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\t\/\/ public eri\u015fim seviyesinde\n\t\t\/\/ geri d\u00f6n\u00fc\u015f tipi void (bo\u015f) olan method\n\t\tpublic void EatSomething()\n\t\t{\n\t\t}\n\n\t\t\/\/ private eri\u015fim seviyesinde\n\t\t\/\/ string geri d\u00f6n\u00fc\u015f tipinde\n\t\t\/\/ geri d\u00f6n\u00fc\u015f de\u011feri return ile Speak() methodunu \u00e7a\u011f\u0131rana teslim edilir.\n\t\tprivate string Speak()\n\t\t{\n\t\t\t\tstring voice = \"Meooow\";\n\t\t\t\treturn voice;\n\t\t}\t\n}\n<\/pre>\n\n\n\n<p>Bir metot parametreli veya parametresiz \u015fekilde yaz\u0131labilir. Ayn\u0131 isimde ve parametrelere sahip iki ayr\u0131 metot yazamazs\u0131n\u0131z. C# yaz\u0131l\u0131m dili de ayn\u0131 isimde ve farkl\u0131 parametrelere sahip iki metot yazabilirsiniz. Bu durumdaki metotlar i\u00e7in \u201c<strong>overload<\/strong> <strong>method<\/strong>\u201d denir.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\tprivate bool _isHungry;\t\t\n\n\t\tpublic void EatSomething()\n\t\t{\n\t\t\t\t_isHungry = false;\n\t\t}\t\n\t\t\n\t\t\/\/ EatSomething metodunun overload'u\n\t\tpublic void EatSomething(string feedType)\n\t\t{\n\t\t\t\tif(feedType == \"meat\")\n\t\t\t\t{\n\t\t\t\t\t\t_isHungry = false;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t\t_isHUngry = true;\n\t\t\t\t}\n\t\t}\t\n}\n<\/pre>\n\n\n\n<p>Bir metot i\u00e7erisinde ba\u015fka bir metodu \u00e7a\u011f\u0131rabilirsiniz.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\tpublic void FindToys()\n\t\t{\n\t\t\t\tPlayWithToys();\n\t\t}\n\n\t\tpublic void PlayWithToys()\n\t\t{\n\t\t}\n}\n<\/pre>\n\n\n\n<p>Metotlar\u0131, \u00e7al\u0131\u015fan alt programc\u0131klar olarak d\u00fc\u015f\u00fcnebilirsiniz. Dolay\u0131s\u0131yla bir metot i\u00e7erisinde birden fazla i\u015f yaz\u0131labilir. Fakat bir metodun birden fazla sorumlulu\u011fu olmamas\u0131na \u00f6zen g\u00f6stermeliyiz. Buna dikkat etmedi\u011fimizi en rahat \u015f\u00f6yle anlayabiliriz: bir metot i\u00e7inde yap\u0131lan bir i\u015fleme ba\u015fka bir metot i\u00e7erisinde ihtiya\u00e7 duyuyor ve o i\u015flerle ilgili yazd\u0131\u011f\u0131m\u0131z kodlar\u0131 ba\u015fka bir metoda da kopyalama ihtiyac\u0131 duyuyorsak kopyalad\u0131\u011f\u0131m\u0131z kodlardan ba\u015fka bir metot yazabiliriz demektir. E\u011fer ki kopyalad\u0131\u011f\u0131m\u0131z bu kodlara ba\u015fka bir s\u0131n\u0131fta (class) ihtiya\u00e7 duyuyorsak o zaman yeni bir s\u0131n\u0131fa yani nesneye ihtiyac\u0131m\u0131z var demektir. B\u00f6ylece o i\u015flemde bir hata olur veya bir de\u011fi\u015fiklik yapmak ihtiyac\u0131 duydu\u011funuzda, tek tek yazd\u0131\u011f\u0131n\u0131z yerleri aray\u0131p d\u00fczeltmek yerine ilgili metodu veya ilgili s\u0131n\u0131f\u0131 de\u011fi\u015ftirdi\u011finizde, yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fikli\u011fi bir seferde her yere uygulam\u0131\u015f olursunuz.<\/p>\n\n\n\n<p>\u00d6rnek olarak; Bir metot kendi i\u00e7erisinde bir \u00fcr\u00fcn\u00fcn fiyat\u0131n\u0131 g\u00fcncelleyip kay\u0131tl\u0131 kullan\u0131c\u0131lara mail at\u0131yorsa bunu en az iki metoda b\u00f6lebiliriz. Biri fiyat g\u00fcncelleme metodu, di\u011feri kullan\u0131c\u0131lara mail atma metodu. Mesela bir \u00fcr\u00fcn\u00fcn sat\u0131\u015f\u0131n\u0131 sonland\u0131r\u0131p kullan\u0131c\u0131lara mail atmak istedi\u011finizde mail atma i\u015flemi ile ilgili metodu tekrar \u00e7a\u011f\u0131rmam\u0131z yeterli olacakt\u0131r.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class StockManagement\n{\n\t\tprivate int _price = 50;\n\t\tpublic void UpdatePrice()\n\t\t{\n\t\t\t\t_price = 100;\n\t\t\t\tstring message = \"\u00dcr\u00fcn\u00fcn fiyat\u0131 g\u00fcncellendi: \"+ _price.ToString();\n\t\t\t\tSendMail(message);\n\t\t}\n\n\t\tpublic void StopSell()\n\t\t{\n\t\t\t\tSendMail(\"\u00dcr\u00fcn\u00fcm\u00fcz\u00fcn sat\u0131\u015f\u0131 bulunmamaktad\u0131r.\");\n\t\t}\n\n\t\tpublic void SendMail(string message)\n\t\t{\n\t\t}\n}\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Constructor<\/strong><\/h2>\n\n\n\n<p>Bir nesne \u201cRun Time\u201dda yarat\u0131ld\u0131\u011f\u0131nda ilk \u00e7al\u0131\u015fan metoda \u201c<strong>constructor<\/strong>\u201d denir. \u201c<strong>Constructor method\u201dlarda geri d\u00f6n\u00fc\u015f de\u011feri yaz\u0131lmaz ve \u201cConstructor method\u201d s\u0131n\u0131f (class) ismi ile ayn\u0131d\u0131r.<\/strong> \u201cConstructor Method\u201dun varsay\u0131lan geri d\u00f6n\u00fc\u015f de\u011feri s\u0131n\u0131f\u0131n kendisidir.<\/p>\n\n\n\n<p>Bir s\u0131n\u0131f i\u00e7erisinde \u201cConstructor method\u201d yaz\u0131lmam\u0131\u015fsa arka planda varsay\u0131lan olarak a\u015fa\u011f\u0131daki gibi \u201cConstructor method\u201d varm\u0131\u015f gibi i\u015flem g\u00f6r\u00fcr.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\tpublic Cat()\n\t\t{\n\t\t}\n}\n<\/pre>\n\n\n\n<p>Constructor\u2019lar bir nesne yarat\u0131ld\u0131\u011f\u0131nda ilk \u00e7al\u0131\u015fan metot oldu\u011fu i\u00e7in genel olarak o nesne i\u00e7erisinde varsay\u0131lan de\u011ferleri tan\u0131mlamak i\u00e7in kullan\u0131labilirler.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\tprivate bool _isHungry;\n\t\tprivate bool _isSleep;\n\t\tpublic string name;\n\n\t\t\/\/Constructor\n\t\tpublic Cat()\n\t\t{\n\t\t\t\t_isHungry = true;\n\t\t\t\t_isSleep = false;\n\t\t}\n\n\t\t\/\/Constructor method (overload)\n\t\tpublic Cat(bool isHungry, bool isSleep)\n\t\t{\n\t\t\t\t_isHungry = isHungry;\n\t\t\t\t_isSleep = isSleep;\n\t\t}\n}\n<\/pre>\n\n\n\n<p>Bir nesneye ait s\u0131n\u0131f\u0131 yazd\u0131k. Peki \u201cRun Time\u201dda bir nesneyi nas\u0131l yarat\u0131r\u0131z? \u00d6rnek olarak yukar\u0131da yazd\u0131\u011f\u0131m\u0131z <strong>Cat <\/strong>s\u0131n\u0131f\u0131n\u0131 kullanal\u0131m.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">using UnityEngine;\n\npublic class Main : MonoBehavior\n{\n\t\tprivate Cat cat1;\n\t\tprivate Cat cat2 = new Cat();\n\n\t\tprivate void Awake()\n\t\t{\n\t\t\t\tCat cat0 = new Cat();\n\t\t\t\tcat0.name = \"Tekir\";\n\t\t\t\t\n\t\t\t\tcat1 = new Cat(false, false);\n\t\t\t\tcat1.name = \"Garfield\";\n\t\t\t\t\n\t\t\t\tDoSomeThing();\n\t\t\t\t\n\t\t\t\tcat2.name = \"sarman\";\n\t\t}\n\n\t\tpublic void DoSomeThing()\n\t\t{\n\t\t\t\t\/\/ null referance error verecektir.\n\t\t\t\tDebug.Log(\"cat0 name: \"+cat0.name);\n\n\t\t\t\t\/\/ \"Garfield\" de\u011ferini bize geri d\u00f6nd\u00fcr\u00fcr.\n\t\t\t\tDebug.Log(\"cat1 name: \"+ cat1.name);\n\n\t\t\t\t\/\/ null referance hatasi verecektir.\n\t\t\t\tDebug.Log(\"cat2 name: \"+cat2.name);\n\t\t}\n}\n<\/pre>\n\n\n\n<p>Yukar\u0131daki \u00f6rnekte iki ayr\u0131 Cat nesnesi yaratt\u0131k. Yeni bir nesne yarat\u0131rken s\u0131n\u0131f isminin \u00f6n\u00fcne \u201cnew\u201d yazarak bellekte o nesne i\u00e7in bir alan\u0131 ay\u0131rm\u0131\u015f oluruz.<\/p>\n\n\n\n<p>\u00d6rnekte <em>cat0<\/em> nesnesi ana s\u0131n\u0131f\u0131n\u0131n (main class) \u201cAwake\u201d metodu i\u00e7erisinde tan\u0131mland\u0131\u011f\u0131 i\u00e7in <em>(Cat cat0 = new Cat())<\/em> bu de\u011fi\u015fkene eri\u015fimimiz sadece \u201cAwake\u201d i\u00e7erisinde olacakt\u0131r. cat1 ise metotlar\u0131n d\u0131\u015f\u0131nda tan\u0131mlan\u0131p yaratma i\u015flemi \u201cAwake\u201d metodu i\u00e7erisinde yap\u0131lm\u0131\u015ft\u0131r. \u201cDoSomeThing\u201d i\u00e7erisinde ise isim (name) de\u011feri istenmi\u015ftir. Hatas\u0131z bir \u015fekilde \u00e7al\u0131\u015facakt\u0131r. cat2 ise metotlar\u0131n d\u0131\u015f\u0131nda tan\u0131mlanm\u0131\u015f ve \u201cnew\u201d denilerek yarat\u0131lm\u0131\u015ft\u0131r. Fakat \u201cDoSomeThing\u201d i\u00e7erisinde hata verecektir. \u00c7\u00fcnk\u00fc yaratma i\u015flemi \u201cDoSomeThing\u201d metodundan sonra yap\u0131ld\u0131\u011f\u0131 i\u00e7in bellekte kendisi i\u00e7in ayr\u0131lm\u0131\u015f bir alan\u0131 bulamayacakt\u0131r. Hata verecektir.<\/p>\n\n\n\n<p><strong>Yaratt\u0131\u011f\u0131m\u0131z her nesnenin veya de\u011fi\u015fkenin bellekte bir ya\u015fam \u00f6mr\u00fc vard\u0131r.<\/strong> cat0 sadece metot i\u00e7erisinde tan\u0131mlan\u0131p yarat\u0131ld\u0131\u011f\u0131 i\u00e7in \u00f6mr\u00fc \u201cAwake\u201d i\u00e7erisinde s\u0131n\u0131rland\u0131r\u0131lm\u0131\u015ft\u0131r. cat1 ve cat2 ise s\u0131n\u0131f i\u00e7erisinde tan\u0131mland\u0131\u011f\u0131 i\u00e7in \u00f6mr\u00fc \u201cMain\u201d \u00f6mr\u00fc kadard\u0131r.<\/p>\n\n\n\n<p>cat0\u2019a bu nedenle \u201c<strong>Local Variable<\/strong>\u201d (yerel de\u011fi\u015fken) denir.<\/p>\n\n\n\n<p>cat1 ve cat2\u2019e bu nedenle \u201c<strong>Global Variable<\/strong>\u201d (genel de\u011fi\u015fken) denir. Daha fazla bilgi i\u00e7in \u201cLocal Variable\u201d ve \u201cGlobal Variable\u201d konular\u0131n\u0131 ve \u201c<strong>Memory Management<\/strong>\u201d ve \u201c<strong>Garbage Collector<\/strong>\u201d konular\u0131n\u0131 ara\u015ft\u0131rman\u0131z\u0131 \u00f6neririm.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Properties<\/strong><\/h2>\n\n\n\n<p>Bir field\u2019\u0131n de\u011ferini okumak (<strong>get<\/strong>), yazmak veya de\u011fi\u015ftirmek (<strong>set<\/strong>) i\u00e7in kulland\u0131\u011f\u0131m\u0131z \u00f6\u011felerdir. Bir field\u2019\u0131n de\u011ferinin s\u0131n\u0131f (class) d\u0131\u015f\u0131ndan de\u011fi\u015ftirilmesini istemedi\u011fimiz de bu field\u2019\u0131 \u201c<strong>private<\/strong>\u201d yapar\u0131z. Fakat bu field\u2019\u0131n de\u011ferini s\u0131n\u0131f d\u0131\u015f\u0131ndan da de\u011fi\u015ftirilebilir olmas\u0131n\u0131 istiyor ve do\u011frudan eri\u015fimini istemiyorsak bu field i\u00e7in bir property yazabiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\tprivate string _name;\n\n\t\tpublic string Name\n\t\t{\n\t\t\t\tget { return _name: }\n\t\t\t\tset { _name = value: }\n\t\t}\n}\n<\/pre>\n\n\n\n<p>Property i\u00e7erisinde, bir field\u2019\u0131 \u201cget\u201d veya \u201cset\u201d ederken kontrol edebiliriz. A\u015fa\u011f\u0131daki \u00f6rnekte \u201c<strong>_name<\/strong>\u201d de\u011ferinin bo\u015f olmas\u0131n\u0131 istemiyorum. Bu nedenle <strong>set<\/strong> ederken (yazarken) de\u011feri bo\u015f veya \u201cnull\u201d ise varsay\u0131lan bir de\u011fer atamas\u0131n\u0131 istiyorum. Ayn\u0131 \u015fekilde <strong>get<\/strong> ederken (okurken) de\u011feri bo\u015f veya null ise bana field\u2019\u0131na varsay\u0131lan bir de\u011fer atanmas\u0131n\u0131 ve bana bu de\u011feri d\u00f6nmesini istiyorum.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\tprivate string _name;\n\n\t\tpublic string Name\n\t\t{\n\t\t\t\tget \n\t\t\t\t{ \n\t\t\t\t\t\tif(string.IsNUllOrEmpty(_name))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_name = \"UnNamed\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn _name;\n\t\t\t\t}\n\t\t\t\tset \n\t\t\t\t{ \n\t\t\t\t\t\tif(string.IsNullOrEmpty(value))\n\t\t\t\t\t\t\t\t_name = \"UnNamed\";\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t_name = value: \n\t\t\t\t}\n\t\t}\n}\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">using UnityEngine;\n\npublic class Main : MonoBehavior\n{\n\t\t\n\t\tprivate void Awake()\n\t\t{\n\t\t\t\tCat cat0 = new Cat();\n\t\t\t\tDebug.Log(\"1 Cat Name: \" + cat0.Name); \n\t\t\t\tcat0.Name = \"Garfield\";\n\t\t\t\tDebug.Log(\"2 Cat Name: \" + cat0.Name);\n\t\t}\n}\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Log ciktisi:\n\/\/1 Cat Name: UnNamed\n\/\/2 Cat Name: Garfield\n<\/pre>\n\n\n\n<p>Bir property\u2019nin bir field ile ili\u015fkisinin olmas\u0131na gerek yoktur. A\u015fa\u011f\u0131daki gibi bir property de yazabilirsiniz.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\tpublic bool IsSleeping\n\t\t{\n\t\t\t\tget; \n\t\t\t\tset;\n\t\t}\n}\n<\/pre>\n\n\n\n<p>Bir property\u2019nin get ve set i\u015flemlerini isterseniz s\u0131n\u0131f (class) d\u0131\u015f\u0131 eri\u015fimlere kapatabilirsiniz. A\u015fa\u011f\u0131daki \u00f6rnekte s\u0131n\u0131f d\u0131\u015f\u0131na sadece <strong>get<\/strong> a\u00e7\u0131k, <strong>set<\/strong> ise sadece s\u0131n\u0131f i\u00e7inde kullan\u0131labilirdir. S\u0131n\u0131f d\u0131\u015f\u0131ndan set edersek derleme hatas\u0131 al\u0131r\u0131z.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Cat\n{\n\t\tpublic bool IsSleeping\n\t\t{\n\t\t\t\tget; \n\t\t\t\tprivate set;\n\t\t}\n}\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">using UnityEngine;\n\npublic class Main : MonoBehavior\n{\n\t\t\n\t\tprivate void Awake()\n\t\t{\n\t\t\t\tCat cat0 = new Cat();\n\t\t\t\tDebug.Log(\"Is Sleeping: \" + cat0.IsSleeping);\n\t\t\t\t\/\/ IsSleeping sadece Cat class'\u0131 i\u00e7ersinden set edilebilir.\n\t\t\t\t\/\/ A\u015fa\u015f\u0131daki sat\u0131rda derleme hatas\u0131 al\u0131r\u0131z. \n\t\t\t\tcat0.IsSleeping = true;\n\t\t}\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Neler \u00d6\u011frendik?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Bir nesneyi bir programa aktar\u0131rken classlar\u0131 kulland\u0131k.<\/li><li>Nesnelerin \u00f6zelliklerini ve i\u015flevlerini s\u0131n\u0131flar\u0131n (class) <strong>field<\/strong>, <strong>method<\/strong>, <strong>properties<\/strong> gibi \u00f6\u011feleri ile ifade ettik.<\/li><li><strong>Method<\/strong>, <strong>Property<\/strong>, <strong>Field<\/strong>, <strong>Constructor<\/strong> \u00f6\u011felerini ve nas\u0131l kullan\u0131ld\u0131klar\u0131n\u0131 \u00f6\u011frendik.<\/li><li><strong>public<\/strong> ve <strong>private Access Modifiers<\/strong> (Eri\u015fim Belirleyicileri) ve bunlar\u0131n basit kullan\u0131m ve etkilerini \u00f6\u011frendik.<\/li><\/ul>\n\n\n\n<p>Daha fazlas\u0131n\u0131 ara\u015ft\u0131rmak, okumak, ve \u00f6\u011frenmek i\u00e7in anahtar kelimeler: <em>Access Modifiers, Constructor, Method, Property, Field, Local Variable, Global Variable, Memory Management, Garbage Collector<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unity 3D ile Nesne Y\u00f6nelimli Programlama yaz\u0131 serisinde class nedir, class&#8217;\u0131n temel \u00f6zellikleri nelerdir sorular\u0131n\u0131 yan\u0131tl\u0131yoruz.<\/p>\n","protected":false},"author":50,"featured_media":18279,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[8875],"tags":[],"class_list":["post-18263","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-akademi"],"acf":[],"_links":{"self":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts\/18263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/users\/50"}],"replies":[{"embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/comments?post=18263"}],"version-history":[{"count":1,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts\/18263\/revisions"}],"predecessor-version":[{"id":152069,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts\/18263\/revisions\/152069"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/media\/18279"}],"wp:attachment":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/media?parent=18263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/categories?post=18263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/tags?post=18263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}