December 31, 2007
@ 05:08 PM

C#'daki using direktifini hepimiz biliyoruz.

using System;
using System.Data;

Peki tam olarak ne yapıyor bu using? İlk aşamada bilinen görevini açıklayayım.Using direktifleri yazarak, kullanacağınız sınıfın namespace'ini tekrar tekrar bildirmenize gerek kalmaz.

Örneğin "using System.Data.SqlClient;" kodunu yazdığınızda bir SqlParameter nesnesi yaratmak için;

System.Data.SqlClient.SqlParameter paramSQL1 = 
new System.Data.SqlClient.SqlParameter();

yazmanıza gerek kalmaz.

SqlParameter paramSQL1 = new SqlParameter();

kodu ile tanımlamayı yapabilirsiniz.

Bunun yanısıra using direktifi ile aliaslar yaratabiliriz.Ooo süper.Ee nedir bu alias?
Aynı projede farklı namespaceler içinde projeler geliştirebiliriz.Örneğin "AndromedaM31SarmalGalaksi" ve "M33SpiralGalaksi" namespace lerimiz olsun.
"AndromedaM31SarmalGalaksi" namespace i icinde "Yıldız" isminde bir sınıfımız olsun.Aynı şekilde ikinci galaksimiz "M33SpiralGalaksi" namespace'inde de
"Yıldız" isminde bir sınıfımız olsun.

Bu iki namespace'i aynı projede kullandığımızda Yıldız sınıfları çakışacaktır.



"Ambiguous name - choose from the following :)" mesajı ile Microsoft'ta da ne kadar espritüel kod geliştiren arkadaşlarımızın olduğunuda anlamış oluyoruz :P

Dolayısı ile hangi galaksi (namespace) için Yıldız sınıfını yarattığımızı belirtmemiz gerekir.
Bu tür durumlarda using direktifi ile alias tanımlarız.

Örnek proje:

using System;
using System.Collections.Generic;
using System.Text;

using AndromedaM31SarmalGalaksi;
using M33SpiralGalaksi;

namespace ConsoleApplication1
{
    using AndromedaM31SarmalGalaksi;
    using M33 = M33SpiralGalaksi.Yildiz; // İŞTE ALIAS IMIZ...

    class Program
    {
        static void Main(string[] args)
        {
            // M33 alias ını kullanarak direkt olarak
            // M33SpiralGalaksi.Yildiz
            // sınıfını hedeflemiş bulunuyoruz...
M33 a = new M33();
Yildiz b = new Yildiz(); Console.WriteLine(a.ToString()); Console.WriteLine(b.ToString()); } } } namespace AndromedaM31SarmalGalaksi { public class Yildiz { public override string ToString() { return "Andromeda M31 Sarmal Galaksi"; } } } namespace M33SpiralGalaksi { public class Yildiz { public override string ToString() { return "M33 Spiral Galaksi"; } } }




Projenin çıktısı;

şeklinde olacaktır.

Gelelim using'in farklı bir kullanımına...
MSDN der ki : Defines a scope, outside of which an object or objects will be disposed.

Yani der ki using size, imlecin dışarı çıktığı anda using le yaratılan nesne veya nesnelerin yokedileceği bir blok yaratmanızı sağlar.
Unutmadan değinmek isterim using ile yaratılacak nesneler IDisposable arayüzünü uygulamış olmalıdırlar!

using (nesne yaratma işlemi)
{
}
//yarattığımız nesne imleç bu satıra gelince yok olacaktır.

En güzel anlatım örnekli anlatımdır derler, hemen bir örnek yapalım.

using System;

class C : IDisposable
{
    public void UseLimitedResource()
    {
        Console.WriteLine("Using limited resource...");
    }

    void IDisposable.Dispose()
    {
        Console.WriteLine("Disposing limited resource.");
    }
}

class Program
{
    static void Main()
    {
        using (C c = new C())
        {
            c.UseLimitedResource();
        }
        Console.WriteLine("Now outside using statement.");
        Console.ReadLine();
    }
}

Çıktıya bakalım;



Evet tahmin ettiğimiz gibi; "Now outside using statement." mesajından önce imleç using kod bloğundan çıktığı için otomatik olarak C sınıfının Dispose metodu çağırılmıştır.

Alt tarafı using değil mi? :)
Hayırlı kodlamalar...

Kaynak:MSDN


 
Categories: Software

December 31, 2007
@ 01:22 PM

Herkesin yeni yılını kutlar, 2008'in herkese daha az patch,bug getirmesini ve sonumuzun aşağıdaki elemana benzememesini dilerim.


 
Categories: Genel

using i bilirsiniz.
using System.Data;
using System.Configuration;
....

bir de böyle deneyin ;

public
void InsertRow(string connectionString, string insertSQL)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        // The insertSQL string contains a SQL statement that
        // inserts a new row in the source table.
        OleDbCommand command = new OleDbCommand(insertSQL);

        // Set the Connection to the new OleDbConnection.
        command.Connection = connection;

        // Open the connection and execute the insert command.
        try
        {
            connection.Open();
            command.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        // The connection is automatically closed when the
        // code exits the using block.
    }
}

Kullanım sonunda belirttiği gibi imleç using bloğundan çıktığı anda bağlantı kapatılacaktır.Bu özelliği bana hatırlatan Emre arkadaşıma teşekkürü bir borç bilirim.


 
Categories: Software

December 30, 2007
@ 07:49 PM

Uzun bir aradan sonra herkese selamlar.

Oracle bundan birkaç hafta önce sunucu sanallaştırma ve konsolidasyonu hakkında çok önemli bir açıklama yaptı.Oracle piyasaya yeni bir Virtualization ürünü çıkarttığını bildirdi.Oracle'ın iddiasına göre OracleVM piyasadaki mevcut sanallaştırma yazılımlarından yaklaşık 3 kat hızlı çalışıyor.Oracle'ın sitesinden programı,vm management aracını ve bütün projenin kaynak kodunu indirebilirsiniz.

http://www.oracle.com/technologies/virtualization/index.html

Tabi ürünün hızına etki edecek, VmWare deki Vmotion,VirtualIron daki LiveMotion LiveMaintenance gibi özellikler Oracle VM de mevcut mu kontrol etmek lazım.Eğer bu özellikler mevcut değilse, Oracle'ın normal olarak daha hızlı olması gerekir.Ayrıca bu açıklama ile VmWare'ın kağıtlarının değerinin düştüğünü düşünürsek, Oracle'ın ciddi bir hata yaptığını söyleyebiliriz.

Eğer mevcut VM deki özellikler OracleVM de mevcutsa, sanallaştırma pazarında büyük bir rekabetin başlayacağını söyleyebilirim.Bu çok güzel çünkü rekabet hem kalitenin artması hem de fiyatın düşmesi demek.Her ne kadar müşteri tarafında bu iyi bir haber olsa da üretici tarafında kemerlerin sıkılması demek.Bu dengenin iyi korunması şart.

Oracle VM testleriyle ilgili bilgi veriyor olacağım.


 
Categories: Server Systems