class-struct Farkı
Programlama dillerinde değişkenler bellekteki konumlarına erişim türleri açısından ikiye ayrılır, bunlar türler 'Değer' ve 'Referance' türlerdir.
Bu durumu C# dili için ele alırsak değer türler için 'struct' ve referans türler için 'class' kullanımı tercih edilir. OOP(Neneye Yönelik Programlama) dikkate alındığında daha çok Class kullanılır, eğer biraz ileri seviye yazılım geliştiriyorsanız 'interface'lerile birlikte 'generic' yapıları kullanıyorsunuzdur, generic kullanımlara 'Değer' ve 'Referance' tür kısıtları verirken 'class' ve 'struct' anahtar kelimeleri kullanılır.
Aşağıya bu kısıtlama örneklerinden birini iliştiriyorum;
public class EfEntityRepositoryBase<TEntity, TContext> : IEntityRepository<TEntity>
where TEntity:class ,IEntity,new()
where TContext:DbContext,new()
Yukarıda TEntity generic tipi 'class' ile kısıtlanarak sadece referans tütünden bir değer olabileceği belirtilmiştir.

Her neyse aslında anlatmak istediğim 'struct' yapısı kullanmak istendiğinde struct değişkeni başka bir değişkene atandığında içindeki hangi tip değişken türlerinin değerleri hangi tip değişken türlerinin referanslarının kullanıldığı.

Aslında çoğu kaynakta bu konunun detayını bulamayabilirsiniz ve kendiniz merak edip deneme kodlar yazarak bu tür durumları test etmeniz gerekir.

Kod üzerinden ilerlersek daha açıklayıcı olacaktır sanırım;

Bir 'Musteri' tipi var biz bu tipi hem class hem de struct olarak tamınlıyoruz, bu tip içinde bir de 'IntArray' adında referans tipli bir değişken barındırıyor, incelememiz bu değişken üzerinden olacak.

class Musteri
    {
        internal string TCNo { get; set; }
        internal string Ad { get; set; }
        internal string Soyad { get; set; }
        internal int Cinsiyet { get; set; } // 717770000: Kadın, 717770001: Erkek
        internal int[] IntArray { get; set; }

        internal void Write()
        {
            Console.Write($"{TCNo}-{Ad}-{Soyad}-{Cinsiyet}");
            foreach (int item in IntArray)
            {
                Console.Write($"-{item}");
            }
            Console.Write("\n");
        }
    }

    struct MusteriStr
    {
        internal string TCNo { get; set; }
        internal string Ad { get; set; }
        internal string Soyad { get; set; }
        internal int Cinsiyet { get; set; } // 717770000: Kadın, 717770001: Erkek
        internal int[] IntArray { get; set; }

        internal void Write()
        {
            Console.Write($"{TCNo}-{Ad}-{Soyad}-{Cinsiyet}");
            foreach (int item in IntArray)
            {
                Console.Write($"-{item}");
            }
            Console.Write("\n");
        }
    }


Yukarıda tanımlanan yapıları alttaki kodlar ile test ediyoruz(basit bir Console uygulaması üzerinden test ediyoruz)

static void Main(string[] args)
        {
            Musteri musteri1 = new Musteri
            {
                Ad = "Müşteri1",
                Soyad = "Soyad1",
                Cinsiyet = 717770001,
                TCNo = "11223344567",
                IntArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
            };

            MusteriStr musteriStr1 = new MusteriStr
            {
                Ad = "Müşteri1",
                Soyad = "Soyad1",
                Cinsiyet = 717770001,
                TCNo = "11223344567",
                IntArray = new int[] {1,2,3,4,5,6,7,8,9,10 }
            };

            Console.WriteLine("\n==============Classes==============");
            Musteri musteri2 = musteri1;
            musteri1.Write();
            musteri2.Write();
            musteri2.Ad = "WWW";
            musteri2.IntArray[4] = 777777777;
            musteri1.Write();
            musteri2.Write();

            Console.WriteLine("\n==============Structs==============");
            MusteriStr musteriStr2 = musteriStr1;
            musteriStr1.Write();
            musteriStr2.Write();
            musteriStr2.Ad = "WWW";
            musteriStr2.IntArray[4] = 777777777;
            musteriStr1.Write();
            musteriStr2.Write();
            
            Console.ReadKey();
        }

Altta 'Main' metodu çalıştırılınca alınan çıktı görülüyor. Burada dikkat edilmesi gereken kısım 'struct' değişkeni başka bir değişkene atanınca struct'ta bulunan referans türlerin sadece referansları atanır, bu sebepledir ki 'musteriStr2.IntArray[4] = 777777777;' ifadesi hem 'musteriStr1'in hem de 'musteriStr2'nin ilgili değişkenini etkiler. Aksi türlü olsaydı eğer bu durumu CPU seviyesinde yönetmek baya bir zor olurdu.




Alttaki metod kodu 'Eratosthenes Kalburu' yöntemi ile verilen bir tamsayı değere kadar olan bütün asal sayıların listesini geriye döndürmektedir.

Not: 5 dakikada hızlıcana kodlanmıştır, bu nedenle algoritma karmaşıklığı yüksek olabilir yada daha az satırla yazılabilir!





/// 

/// Geriye Asalsayıların Listesini Döndüren Metod
///
/// Asalsal sayıların hesaplanması istenen Rakam
/// Asalsayı Dizisi
public static int[] Find(int number)
{
int[] Array = new int[number];
for (int i = 0; i < Array.Length; i++)
{
Array[i] = i + 1;
}

Array[0] = 0; // 1 değeri asal olmadığı için yapılan işlem
int arrayBoyutununKarakoku = (int)Math.Sqrt(Array.Length);

for (int i = 2; i <= arrayBoyutununKarakoku; i++)
{
for (int j = 0; j < Array.Length; j++)
{
if (Array[j] != 0 && (Array[j] != i && (Array[j] % i) == 0))
{
Array[j] = 0;
}
}
}

#region Asalsayı Adadinin Elde edilmesi
int asalSayiAdedi = 0;
for (int i = 0; i < Array.Length; i++)
{
if (Array[i] != 0)
{
asalSayiAdedi++;
}
}
#endregion

#region Geriye Döndürülecek Olan Asalsayı Dizisinin Oluşturulması
int[] asalSayiDizisi = new int[asalSayiAdedi];
int asalSsayiIndex = 0;
for (int i = 0; i < Array.Length; i++)
{
if (Array[i] != 0)
{
asalSayiDizisi[asalSsayiIndex] = Array[i];
asalSsayiIndex++;
}
}
#endregion

return asalSayiDizisi;
}
Windows Service Eklemek
Bu yazıda windows işletim sisteminde manuel olarak nasıl servis ekleneceğini ve silineceğini ifade etmeye çalışacağım.
Bir servis ilgili işletim sisteminde çalıştırılabilir uzantılı bir dosyanın ilgili işletim sistemine servis referans verilmesi sureti ile oluşturulur. Burada windows için gerekli olan adımlar belirtilmektedir.

Aşağıdaki adımlar sırası ile izlenir;

1_) CMD yönetici olarak açılır.(Komut satırı yönetici olarak çalıştırılır)

2_) “cd..” komutları çalıştırılarak ‘C:\>’ dizinine gelinir.

3_) “cd Documents and Settings” komutu çalıştırılır ve “C:\Documents and Settings>” dizinine gelinir, bu dizinden servisler ile ilgili işlemler yapılır(servis silme, yeni ekleme, güncelleme vb.)

4_) Bir servis eklemek için;  Parametreler çift tırnaklar arasında olmalıdır.
sc create "Eklenecek_Servisin_Adı" binpath= "ServisOlarakEklenecekExeninYolu"

5_) Bir servisi silmek için; tırnak işaretleri kullanılmaz.
sc delete Silinecek_Servisin_Adı

Yukarıdaki kırmızı yazılar komut satırında ilgili servis için yapılacak işlemi belirtmektedir ve sonrasında ilgili servisin adı yazılıyor ve eğer servis ekleme işlemi ise servis olarak eklenecek çalıştırıla bilir dosyanın(.exe dosyası) yolu veriliyor.

Yazı ile anlattıklarımızı bir de görsel olarak ifade edersek;

Komut satırı yönetici olarak açılır


"cd.." komutu bizi bir üst dizine çıkarır, "C:\>" dizinine kadar bu işleme devam edilir.



"C:\Documents and Settings>" dizinine gelinir ve 

Yapılacak işleme göre gerekli kodlar yazılır...

Hapsi bu kadar.
.Net Web Projesini Publish Etmeden ISS ile Local'de Yayımlamak
.Net üzerinde bir web uygulaması(.net MVC, .net Web.Api vb.) geliştiriyorsunuz ve bu uygulamayı IIS üzerinden yayımlamak istiyorsunuz, akla ilk gelen yol uygulamayı publish etmek ve IIS'ten sitelere eklemek olur ama bu yöntemi kullanınca kodda yapılan her değişiklik için tekrar publish etmek ve IIS'e eklenen klasör yolundaki dosyaları değiştirmek gerekir. Bunun daha kolay yolu ise ISS'e direkt uygulama yolunu eklemek olacaktır bu şekilde kodda yapılan her değişiklik publish işlemini tekrar tekrar yapmadan yansıtılacaktır.
Bu kullanımı basit bir .net Web.Api uygulamasını üzerinden anlatalım;

 1;

 2;

3;

4;




 5;



6;
7;
 8;
 9;
10;
 11;
 12;
 13;
 14;
 15;
16;








SON...

 
Copyright © 2017 Programlama Tüm Hakları Saklıdır
Edited by Ahmet Cefakar