Csharp | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar csharp

AçıkAkademi C# uygulaması geliştirmek istiyorum Eğitimleri 2016

26 August 2016 Yorum yapılmamış

AçıkAkademi üzerinde yayınlanan 16 video’luk C# uygulama geliştirme eğitim seti yayına alındı.
Sevgili arkadaşım Bora Kaşmer ile hazırladığımız eğitim setini sizler de C# uygulaması geliştirmek istiyorum başlıklı AçıkAkademi sayfasından izleyebilirsiniz. Eğitim konu listesi;

  • Açılış
  • C# Hakkında
  • Visual Studio
  • İlk Proje
  • Rakamsal Veri Tipleri-1
  • Rakamsal Veri Tipleri-2
  • Tarihsel Veri Tutabilen Değişkenler-1
  • Tarihsel Veri Tutabilen Değişkenler-2
  • Liste Tipinde Değişkenler
  • For Döngüsü
  • ForEach Döngüsü
  • Switch
  • Sınıflar ve Öğeler
  • Özellikler ve Enumlar
  • Metodlar
  • C# Eğitiminden En İyi Nasıl Faydalanabilirim?

AçıkAkademi için bu eğitim setini çekmemizi sağlayan sevgili arkadaşım Ümit Batu‘ya da teşekkür ederim.

C#’ta assembly: InternalsVisibleToAttribute kullanımı

16 July 2016 Yorum yapılmamış

C#‘ta kullanabildiğimiz erişim belirleyicileri (Access Modifiers) daha önce C# Erişim Belirleyiciler – Access Modifiers isimli makalede ele almıştım.

C# kurallarına göre, bir proje diğer projeyi referans olarak görüyorsa public erişim belirleyicili (access modifier) olan class‘lara erişebilir. internal access modifier olan class‘lara ise referans olarak gören projeden erişilemez, sadece tanımlandığı projeden erişilebilir.

Göstermesi, anlatmasından kolay olacak sanırım.

Hemen Visual Studio 2015 açalım ve yeni bir Console Application projesi oluşturalım;

Solution‘a sağ tuşla tıklayalım ve Add Project menüsünden bir tane Class Library ekleyelim ve Class1.cs dosyasının ismini VeritabaniErisimi.cs olacak şekilde değiştirelim;

Yeni oluşturduğumuz Class Library projesini Console Application projesinin referans‘larına ekleyelim;

Böylece solution‘ımız aşağıdaki gibi gözükmeli;

VeritabaniErisimi.cs dosyasını açalım ve VeritabaniErisimi class‘ının erişim belirleyicisini (Access Modifier) internal yapalım.

Console Application projesindeki Program.cs dosyasını açar ve içerisinden VeritabaniErisimi isimli class‘a erişmek istersek, internal access modifier‘ına sahip olduğu için erişemeyeceğiz.

Bu noktada proje derlenemez ve ‘VeritabaniErisimi’ is inaccessible due to its protection level hatası verir.

Çünkü; internal access modifier‘ına sahip class‘lar sadece kendi projelerinde kullanılabilir, erişebilirlerdir. Kendi projelerinin dışından erişilemezler.

Eğer istersek, Kutuphane isimli Class Library‘deki internal access modifier‘ına sahip sınıfların başka projelerden de erişilebilir olmasını sağlayabiliriz.

Bunun için namespace üstünde InternalsVisibleTo Attribute‘ünü kullanmamız lazım.

Öncelikle VeritabaniErisimi.cs dosyasını açalım (aslında Kutuphane projesindeki herhangi bir csharp dosyasını açsak olur) ve using kısmına System.Runtime.CompilerServices ekleyelim, namespace üzerine de [assembly: InternalsVisibleTo(“PROJEADI”)] yazalım.

InternalsVisibelTo attribute‘ünün parametresi olan PROJEADI, internal access modifier‘ına sahip class‘ların görünür olmasını istediğimiz projelerin adı olmalı. Örneğin;

EntityFramework Expression kullanarak esnek veritabanı sorguları

04 February 2016 1 yorum

Veritabanında gerçekleşecek sorguları yazdığımız Veritabanı Erişim Katmanı‘nda (Data Access Layer, DAL) genelde bir tablodaki kayıtları liste olarak veya aranılan kritere göre filtreleyerek döndüren methodlarımız olur.

Projenin geliştirilme süresince gelişen ihtiyaçlara göre bu methodlara çeşitli kriterlere göre filtreleme yapan yeni methodlar eklenir ve bir süre sonra işin içinden çıkılmaz bir hale gelebilir.

Expression‘ları kullanarak bu methodları azaltabiliriz.

Hemen Visual Studio‘yu açalım ve yeni bir Console Application projesi oluşturalım;

Projeye Nuget Package Manager‘ı kullanarak EntityFramework paketini ekleyelim;

Projeye TestDatabaseDataContext isminde yeni bir class ekleyelim ve içerisine aşağıdaki property tanımlamasını ekleyelim;

public class TestDatabaseDataContext : DbContext
{
	public DbSet<Country> Countries { get; set; }
}

Projeye Country isminde yeni bir class daha ekleyelim ve içerisine aşağıdaki property tanımlamalarını yapalım;

public class Country
{
	public int Id { get; set; }

	public string Name { get; set; }

	public decimal Area { get; set; }
}

Tekrar Program.cs dosyasını açalım ve içerisinde aşağıdaki iki method’u yazalım;

public static IEnumerable<Country> GetCountryList()
{
	using (var context = new TestDatabaseDataContext())
	{
		var ulkeler = (from country in context.Countries select country);

		foreach (var item in ulkeler)
		{
			yield return item;
		}
	}
}

public static Country GetCountry(int id)
{
	using (var context = new TestDatabaseDataContext())
	{
		return (from country in context.Countries select country).FirstOrDefault(e => e.Id == id);
	}
}

Böylece ülkelerin listesini ve aldığı id parametresine göre tek bir ülke’yi geri döndüren iki method‘umuz olacak. Fakat zamanla gelişen yeni talepler ile bu method’lara, isme göre ülke listesini döndüren method, belli bir yüzölçümünden büyük ülkelerin listesini döndüren method, vs eklenecektir.

Expression sınıfını kullanarak bu methodları tekilleştirebiliriz. Hemen aşağıdaki method’u ekleyelim;

public static IEnumerable<Country> GetCountryList(Expression<Func<Country, bool>> expression)
{
	using (var context = new TestDatabaseDataContext())
	{
		var ulkeler = (from country in context.Countries select country).Where(expression);

		foreach (var item in ulkeler)
		{
			yield return item;
		}
	}
}

İstediğimiz yerde artık bu methodu aşağıdaki şekillerde kullanabiliriz;

var ulkeler1 = GetCountryList(u => u.Name.Contains("rika"));
// Amerika, Afrika, Kosta Rika, ...

var ulkeler2 = GetCountryList(u => u.Area > 100);

var ulkeler3 = GetCountryList(u => u.Id < 10);

Böylece tek bir method’a nasıl bir sonuç listesi istediğimizi tarif ediyoruz ve o bize o sonucu döndürüyor.

C# 1 vs C# 6

21 November 2015 Yorum yapılmamış

Eğitim vermeye ilk başladığım yıllarda Console Application projeleri üzerinden uygulamaların aldığı parametreleri ve bu parametreleri nasıl kullanabileceğimizi anlatıyordum.

En basit diyebileceğimiz bu tip işlerin bile yazılım dünyasında ne kadar değiştiğini geçenlerde konuştuğum ve o zamanlar benim eğitimimi dinleyen bir tanıdığım ile tartıştık.

Aklıma hemen bir test projesi açmak ve kendi gözlerimle görmek geldi.

İlk olarak eski usül yöntemler ile Console Application projesinde parametreleri alalım;

Şimdi yeni usül yöntemler ile Console Application projesinde parametreleri alalım;

Ne dersiniz, C# yazılım geliştiriciler olarak işlerimiz kolaylaştı mı?

C# ile iki tarih arasında belli bir günden kaç adet olduğunu bulmak

02 February 2013 Yorum yapılmamış

Geliştirdiğim projede iki tarih aralığında belirli bir günden kaç adet olduğunu bulmam gerekti.

Bunun için iki tarih arasındaki gün farkını alıp, bir tarih listesi oluşturmak için kullanıyorum, daha sonra tarih listesinin içinde istediğim gün’den kaç tane olduğunu sayıyorum.

Örneğin 2013 yılındaki Pazartesilerin adedi için;

var baslangic = new DateTime(2013, 1, 1);
var bitis = new DateTime(2013, 12, 31);
var toplamGun = (int)bitis.Subtract(baslangic).TotalDays + 1;

var tarihListe = Enumerable.Range(1, toplamGun).Select(e => baslangic.AddDays(e));

var gunAdet = tarihListe.Where(e => e.DayOfWeek == DayOfWeek.Monday).Count();