Sayfalar

Metotlar etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Metotlar etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

28 Ağustos 2019 Çarşamba

Statik metotlar


Bir klasın içine hem statik hemde statik olmayan iki metot tipi yazılabilir. Statik Metotları'da ilgili sınıfı new'lemeden çağırabiliriz. Eğer Sınıf statik olursa tüm metotlar statik olmak zorundadır.

class Program
{
    static void Main(string[] args)
    {
        Manager.Delete();           // Statik metot 
 
        Manager manager = new Manager();
        manager.Add();              // statik olmayan metot
 
        Console.ReadLine();
    }
}
 
 
class Manager
{
 
 
    public void Add()
    {
 
    }
 
    public static void Delete()
    {
 
    }
 
}

25 Ağustos 2019 Pazar

Virtual Methods

"Ortak kullanılacak temel operasyonlar vardır. Fakat isteyen istediği metotu ezerek kendine göre kullanabilir."

Virtual metotlarda virtual - override keywordleri ile çalışılır.
Virtual metotların gövdesi, kod bloğu olmak zorundadır.

Inheritance yapılırken bir metot içerisinde tanımlanan genel işlemler, inherit alan başka bir sınıfta özel ihtiyaçlara göre kullanılmak isteniyorsa bu metot "virtual" olarak tanımlanır ve  inherit alan sınıf içerisinde bu metot "override" keywordu ile çağırılarak içersine istenilen özelleştirme yapılabilir.

Örneğin Databese sınıfında tanımlanmış genel bir Add() metotu, intherit alan MySql ve Sql sınıflarından Sql sınıfı içerisinde farklı işlemler yazılarak kullanılması gerekebilir. Bu durumda Sql sınıfında bu metot override edilerek çağırılır. Böylece MySql.Add() metotu, Base sınıftaki Add() metotunu kullanır. Sql.Add() metotu ise override edilen kendi sınıfı içindeki Add() metotunu kullanır.

Proje de Interface mi, Inheritance mı kullanmalıyım sorusunda, eğer böyle bir özelleştirmeye ihtiyacınız varsa, bu yönetimi interfaceler ile kullanamayız.

class Program
{
    static void Main(string[] args)
    {
        Sql sql = new Sql();
        MySql mySql = new MySql();
 
        sql.Add();      // Sonuç "Added by overrided Sqlcode!"
        mySql.Add();    // Sonuç "Added by default code"
 
        sql.Delete();   // Sonuç "Added by default code"
        mySql.Delete(); // Sonuç "Added by default code"
 
        Console.ReadLine();
    }
 
}
 
class Database
{
    public virtual void Add()
    {
        Console.WriteLine("Added by default code");
    }
 
    public void Delete()
    {
        Console.WriteLine("Deleted by default code");
    }
 
}
 
class Sql : Database
{
    public override void Add()
    {
        Console.WriteLine("Added by overrided Sqlcode!");
        //base.Add();
    }
 
}
 
class MySql : Database
{
 
}



18 Ağustos 2019 Pazar

params ile Birden Fazla Parametre Yollamak

"params" keyword'ü ile metotların içine birden fazla değer yollayabiliriz.
params sonrası bir dizi tanımlayarak istenilen sayıda değişkeni metot ile yollayabiliriz

        static void Main(string[] args)
    {
                    var result = Add(1,2,3,4,5);
        Console.WriteLine(result); //Sonuç 15
        Console.ReadLine();
        
    }
 
    static int Add(params int[] numbers)
    {
        return numbers.Sum();
    }
}
.

Ref ve Out Keyword

Parametreler, "ref" yada "out" keywordleri kullanılmadığı sürece,  Değer Tiplerin değerlerini tutarlar.

Örn. number1 adlı değişken, aşağıdaki örnekte Add() metotuna parametre olarak eklenmiş ve metot içerisinde de number1=60 değeri atanmıştır. Add() metotu değer döndükten sonra, number1 ConsoleWriteLine ile ekrana yazdırılmıştır. Görüldüğü üzere number1 adlı değişkenin değeri değişmemiştir.
Peki Neden Değişmedi?
Bunun nedeni Main metotda ki number1 değişkeninin sadece "değeri" (20) parametre olarak yollanmıştır. Sonraki işlemler farklı bir değişken olan Add()metodunun parametresi, üzerinden yapılmıştır.  Add() metodu içesindeki parametre number1 ile Main metot'da tanımlanmış number1 aynı isme sahip olsada farklı iki yer tutarlar.

class Program
{
    static void Main(string[] args)
    {
        int number1 = 20;
        int number2 = 50;
 
        var result = Add(number1, number2);
        Console.WriteLine(result);  // Sonuç 110
        Console.WriteLine(number1); // Sonuç 20
        Console.ReadLine();
 
    }
 
    static int Add(int number1, int number2)
    {
        number1 = 60;
        return number1 + number2;
    }
}

Aynı işlem Ref Keywordü ile yaptığımızda ise, parametre olarak değişkenin kendisini Add() metotuna yollanmış oluruz. Böylelikle metot içerisinde atanan yeni değer number1 değişkenin yeni değeri olur. number1 adlı değişkene ref keywordu ile atanmadan önce mutlaka bir değer atanmış olmalıdır.

class Program
 {
     static void Main(string[] args)
     {
         int number1 = 20;
         int number2 = 50;
 
         var result = Add(ref number1, number2);
         Console.WriteLine(result);  // Sonuç 110
         Console.WriteLine(number1); // Sonuç 60 
         Console.ReadLine();
 
     }
 
     static int Add(ref int number1, int number2)
     {
         number1 = 60;
         return number1 + number2;
     }
 }

"out" keywordünün farkı ise, number1 parametreye geçilirmeden, bu değişkene bir değer atama zorunluluğu yoktur. Fakat ilk kullanıldığı yerde( bkz. Add() metotu) değer atanmalıdır!


static void Main(string[] args)
{
    int number1;
    int number2 = 50;
 
    var result = Add(out number1, number2);
    Console.WriteLine(result);  // Sonuç 110
    Console.WriteLine(number1); // Sonuç 60 
    Console.ReadLine();
 
}
 
static int Add(out int number1, int number2)
{
    number1 = 60;
    return number1 + number2;
}

Default Parametreli Metotlar

Default parametreli Metodlar
Metot parametrelerine default değerler atayarak işlem sırasında bu değeri almasını sağlayabiliriz. Örneğin;

class Program
{
    static void Main(string[] args)
    {
 
        var result = Add(5);
 
        Console.WriteLine(result);// Sonuç 35 çıkacaktır.
        Console.ReadLine();
 
    }
 
    static int Add(int number1, int number2 = 30)
    {
        var result = number1 + number2;
        return result;
 
    }
 
}

Default parametreler değer olabileceği gibi "null" olarakta atanabilir.

MVC LOADING TOO SLOW ISSUE