Anasayfa / Yazılım / C# / Bir Sınıfta İçinde Değişken Oluşturma ve Özellik Atama

Bir Sınıfta İçinde Değişken Oluşturma ve Özellik Atama

Bu yazımda var olan bir class içinde değişken oluşturmaya, bununla birlikte get ve set metotlarını kullanarak özellik oluşturmaya değinmek istiyorum. Bu yazıyı okumadan önce aşağıdaki yazıya göz atmanızı öneririm. Çünkü devam niteliğindeki yazılardır.

Parametreli Metot Oluşturma

Yazımda uygulama kısmına geçmeden önce teorik bilgi vermek istiyorum. Programlama da sürekli olarak duyacağımız değişken deyimlerinden biri lokal değişken deyimidir. Lokal değişken herhangi bir metot, herhangi bir sınıf içinde yer alan iki köşeli parantez içinde yer alan ve sadece ilgili metot veya class içinde çalışan ve bu metot veya sınıfla ilgili işlemler bittiğinde içeriği kaybolan değişkenlerdir diyebiliriz.

Sınıflar içinde oluşturulan değişkenler bir veya birden fazla özelliğe sahip olabilir. Şimdi yapacağım örnekte deneme sınıfında elma adında bir değişken oluşturacağım. Bu elma değişkeni içinde de _elma adında özellik atayacağım. Amacım bunların kodsal manada nasıl oluşturulduğunu göstermek. Sonra bu sınıf içinde birde MesajGoster adında metodum olacak.

public class deneme
    {
        private string elma;

        public string _elma
        {
            get
            {
                return elma;
            }
            set
            {
                elma = value;
            }
        }
        //metodum
        public void MesajGoster()
        {
            Console.Write("Merhaba Dünya\n{0}!",_elma);
        }
    }

Burada görüleceği üzere elma adında bir private tipinde bir değişken ve sınıfım içinde her yerden erişilebilecek _elma adında bir public özelliğimiz mevcut. Amacım burada bu tanımların nasıl yapıldığını göstermek. Yoksa bi proje vs değil tabi bu 🙂 Amacımız kod yapısını görmek..

Burada public nedir, private nedir bunları kısaca açıklayalım. Private ve Public ön deyimlerini .NET ortamında bir çok yerde göreceksiniz. Bunlar access modifier olarak adlandırılırlar. Yani erişim belirleyicilerdir. Private deyimi ile tanımlanmış olan her türlü değişken, metot, sınıf vb sadece ve sadece tanımlandığı kod bloğu (köşeli parantezleri) arasında çalışır yani sadece o alanda tanınırlar. Public ise diğer alanlardan da erişim sağlanabilirliği açıklar. Genel olarak bir değişken, bir class, bir metot vs tanımlandığında önünde mutlaka access modifier olur. Ancak kullanılmadığı bir çok yer görebilirsiniz. İşte kullanılmadığı durumlarda varsayılan olarak ilgili tanımlama private olarak kabul edilir. Bunu unutmayınız. Genel olarak bir sınıf içinde tanımlanan değişkenler private, bunların özellikleri ise public olarak ifade edilir. Çünkü bu şekilde bir tanımlama debugging işlemlerinde de oldukça kolaylık sağlar.

Kod bloğumda görüleceği üzere değişkenimizi tanımladıktan sonra özellik tanımlamaya geçtik. Özelliği tanımladığım kod aralığı :

public string _elma
        {
            get
            {
                return elma;
            }
            set
            {
                elma = value;
            }
        }

Özellikleri de tanımlarken tıpkı metotlarda ve sınıflarda olduğu gibi isim tanımlamasında aynı kuralları uyguluyoruz. Görüleceği üzere burada da bir erişim belirleyici kullanıyorum. Public olduğunu görebilirsiniz. Yukarıdaki kod bloğunda görüleceği üzere özellik tanımlandıktan sonra bunun içinde bir get bloğum ve bir de set bloğum mevcut. Özellik içinde bu bloklardan sadece biri de yer alabilir. Yani sadece get ve sadece set’te olabilir. Get bloğu ile kullanıcı değişkenin içeriğini okuma imkanı sağlar, set ile ise kullanıcı değişkenin içeriğini değiştirme imkanını sağlar. Bu örnekte biz kullanıcıya hem okuma hemde modifiye etme hakkı veriyoruz.

Bir özellik tanımlandıktan sonra artık biz bunu bir değişken gibi kullanabiliriz. Örneğin = operatörünü kullanarak bir özelliğe değer atayabiliriz. İşte bu gibi bi atamayı özellik içinde belirtilen set bloğu sayesinde gerçekleştiririz. Daha sonra diyelim ki bu değeri ekranda göstermek istiyoruz, işte bu seferde okuma işlemi yapacağımız için özelliğimizin içinde yer alan get bloğu çalıştırılır. Ben bu örnekte kurala uymadım hata ettim ancak aklıma gelmişken belirteyim. Özellikleri tanımlarken büyük harfle başlayıp küçük harfle devam ederiz. Yani Pascal Casing yaparız aslında. Şöyle yani PascalCasing gibi.. Evrensel bir kod dili oluşturmamız açısından bu önemli 🙂

Kodda görülüyor ama git gide daha detaya girelim. get ve set bloklarının nasıl oluşturulduğunu kodda görüyorsunuz. get bloğu get ile başlıyor ve süslü parantez ya da diğer değişle küme parantezi aç ve kapa alanında yer alıyor. Ve bu parantez içinde return yer alıyor. Burada get ile okuduğum değer return’dan sonra gelen elma değerine döndürülüyor. Set bloğuna gelince aynı şekilde set ifadesi ile başlıyor ve daha sonra kümeli parantez aç ve parantez kapa kısmında kodlar yer alıyor. Bu kısım değişkenimi modifiye etme kısmı. Yani istediğim herhangi bir değeri burada değişkenim içine alabiliyorum.

Daha sonra en üstte yer aldığı üzere MesajGoster metodum içinde oluşturduğumuz özelliği kullanıyoruz. Bu kısımla alakalı kodlar :

public void MesajGoster()
        {
           Console.Write("Merhaba Dünya\n{0}!",_elma);
        }

Görüleceği üzere metodumda herhangi bir parametre söz konusu değil. Mesajımızı yazdırıyoruz ama aynı zamanda _elma’nın da değerini ekleyerek yazdırıyoruz. Görüleceği üzere direkt olarak değişkenimizin adı değil, özelliğimizin adı yer alıyor. Çünkü özelliğim içinde yer alan get bloğu ile ben bu değişkenimin içeriğini okuyabileceğim. Yani değerimi asıl değişkenime return edebileceğim.

Şimdi DenemeTest sınıfımı açıyorum ve içindeki kodları aşağıdaki gibi düzenliyorum :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    public class DenemeTest
    {
        public static void Main ( string[] args)
        {
            //deneme sınıfımından instance alıyorum adını ornek verdim
            deneme ornek = new deneme();
            // _elma içindeki ilk veriyi yazıyorum
            Console.WriteLine("Burada _elma içindeki ilk veriyi yazıyorum: '{0}'\n",ornek._elma);
            //Kullanıcıdan bir veri girmesini istiyorum
            Console.Write("Bir veri daha giriniz:");
            //kullanıcının girdiği veriyi instance aldığım ornek içine ve ordaki _elma özelliğine
            //kaydediyorum
            ornek._elma = Console.ReadLine();
            //Boş satır bırakıyorum
            Console.WriteLine();
            //metodumu çalıştırıyoruö
            ornek.MesajGoster();
            //bekleme için kullandım
            Console.ReadLine();
        }        
        
    }
}

Şimdi burada uygulamamı çalıştırdığımda ben ilk anda _elma ozelliğinin içinin şu an boş olduğunu gösterdim. Daha sonra kullanıcıdan veri aldım, bunu okudum ve oluşturmuş olduğum instance üzerinden diğer taraftaki sınıf içindeki değişkenin yani deneme sınıfındaki elma değişkeni içindeki _elma özelliğine bu okuduğum veriyi aktardım. Daha sonra burda oluşturduğum ornek nesnesinin deneme sınıfı üzerinde oluşturduğum mesaj.goster() metodunu kullanarak da veriyi kullanıcıma gösterdim.

2013032802

Şimdi bu noktada UML diyagramı nasıl olur ona da deyinip yazıyı burada şimdilik bitirelim. Artık bir özellik ekledik, global olarak buna property diyoruz böyle de alışabiliriz. Ara ara iki deyimi aynı anda kullanabiliriz. Bu property için access modifier public olduğundan dolayı ben bunu aynı zamanda + işareti ile göstereceğim. UML’de property yazarken şu şekilde yazılır.

<>

Bu şekilde yazılarak property diğer attribute’lerden ve işlemlerden ayrılır. Daha sonra Property ismi gelir. UML’de get ve set için herhangi bir gösterim yapılmaz. property isminin ardından üst üste iki nokta gelir ve ilgili property için veri tipinin ne olduğu yazılır. Örneğimde metodumda olduğu için bi alt satırda da MesajGoster() yer alır. Parametre olmadığı için içi boş parantezlere sahiptir. Metodumda public olduğu için önünde + işareti vardır. Bu yazılarımı uzun ve çok detaylı tutuyorum çünkü bazı ince ayrıntılara bu yazılarda değnip daha sonraki yazılarda ve daha önceden de yazdığım yazılarda atladığım kısımlar oluyor. En azından ilgili sorular için bu yazılar kaynak olarak blog üzerinde bulunabilir. UML’e de alışmak gerek çünkü görsel olarak elimizde ne var ne yok çok daha rahat bir şekilde görebiliyoruz.

2013032801

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir