Talep üzerine Using#

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

Monday, December 31, 2007 5:08:33 PM (GTB Standard Time, UTC+02:00) #    Comments [0]  | 

 

2008#

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

Monday, December 31, 2007 1:22:58 PM (GTB Standard Time, UTC+02:00) #    Comments [0]  | 

 

Bilinen komutlar - farklı kullanım yerleri - güzel sonuç#

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.

Sunday, December 30, 2007 9:23:54 PM (GTB Standard Time, UTC+02:00) #    Comments [0]  | 

 

Oracle VM#

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.

Sunday, December 30, 2007 7:49:01 PM (GTB Standard Time, UTC+02:00) #    Comments [0]  | 

 

All content © 2012, Levent YILDIZ
On this page
This site
Calendar
<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910
Archives
Sitemap
Blogroll OPML
Disclaimer

Powered by: newtelligence dasBlog 2.3.9074.18820

The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Send mail to the author(s) E-mail

Theme design by Jelle Druyts


Pick a theme: