Archive for February, 2007
February 21, 2007 at 13:06 ·
NHibernate konusunda çok fazla tecrübem olmadığından bazı durumlarda sıkıntı yaşayabiliyorum. Bunlardan birisinin çözümü de son derece basitmiş ama benim bulmak için canımı çıkarttı.
Herhangi bir objeyi veritabanından almak istediğinizde, “eşit olmayan” durumunu kullanmak istiyorsanız; ICriteria‘ya şu şekilde “Not Equal” durumunu ekleyebilirsiniz:
.Add(Expression.Not(Expression.Eq(”FieldName”, value)));
Yani, kısacası, Expression.Not ve Expression.Eq (equal)’ı birleştirmeniz gerekiyor. Başkalarının vakit kaybetmemesi dileği ile…
February 11, 2007 at 09:36 ·
Kullanmakta olduğunuz bir class’ın veya class’ın herhangi bir instance’ının (objenin) içerisinde bulunduğu assembly’nin sürümüne erişmek aşağıdaki kadar basit.
Peki buna neden ihtiyaç duyabilirsiniz? Mesela kullanmakta olduğunuz bir component’in hangi sürümünü kullandığınıza programmatic olarak erişmeye ihtiyaç duymanız gibi bir durumla karşılaşabilirsiniz.
Örnek:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(this.GetType().Assembly.GetName().Version.ToString());
Response.Write(typeof(MyCustomClass).Assembly.GetName().Version.ToString());
}
}
February 8, 2007 at 16:46 ·
Örneğin Array’lerden bildiğiniz üzere bazı objeler üzerinde degisken[0], degisken[1] şeklinde değer alabilmek ve değer atamak mümkündür.
Peki kendi yazdığınız bir class içerisinde bunu nasıl yapabilirsiniz? Bunun için C# özel bir keyword içeriyor: this. “this” keyword’unun içinde bulunduğumuz class’ın o anki instance’ına erişmek için kullanıldığını hepimiz biliyoruz fakat aşağıdaki örnekte de görebileceğiniz üzere bu keyword’ün başka bir kullanımı daha var.
using System.Web;
namespace Sunali
{
public class CSharpIndexer
{
private string[] data = new string[4];
public string this[int index]
{
get { return data[index]; }
set { data[index] = value; }
}
public void WriteToStream(HttpResponse response)
{
for (int i = 0; i < data.Length; i++)
{
response.Write(this[i] + "“);
}
}
}
}
Aşağıdaki kod bir ASPX dosyasının içeriğidir…
namespace Sunali
{
public class ClassToUserIndexer : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
DoSomething();
base.OnLoad(e);
}
public void DoSomething()
{
CSharpIndexer csi = new CSharpIndexer();
csi[0] = “Ahmet”;
csi[1] = “Ali”;
csi[2] = “Ayşe”;
csi[3] = “Mehmet”;
csi[4] = “Coşkun”;
csi.WriteToStream(Response);
}
}
}
Not: Örnekte görmüş olduğunuz class’a ait indexer “string” değer döndürmek ve kabul etmek üzere yazıldı fakat siz “this” keyword’ünden önce bulunan “string” tipi yerine istediğiniz tipi yazarak indexer özelliğinden faydalanabilirsiniz.
February 4, 2007 at 15:49 ·
System.Threading.Thread class’ı üzerinde bulunan method’ların yardımı ile ilgili Thread üzerinde memory slot’ları oluşturup, içlerinde istediğiniz bilgiyi saklayabilirsiniz.
Çok basit bir örneğini aşağıda ekliyorum.
using System.Threading;
public class SlotDataProvider
{
public static object GetFromSlot(string slotName)
{
LocalDataStoreSlot slot = GetSlot(slotName);
if (slot == null)
return null;
return Thread.GetData(slot);
}
private static void SaveToSlot(string slotName, object data)
{
LocalDataStoreSlot slot = GetSlot(slotName);
if (slot == null)
return;
Thread.SetData(slot, data);
}
private static LocalDataStoreSlot GetSlot(string slotName)
{
return Thread.GetNamedDataSlot(slotName);
}
}