Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

13 Aralık 2007 Perşembe

GridView DataTable InstantiateIn TemplateColumn Itemplate

Dinamik TemplateColumn için bir örnek(Bu kez çeviri değil)

Herşeyden önce GridView ın aspx ve cs sayfalarındaki durumlarını incelemenizi tavsiye ederim. Biz biraz bakalım ve esas konumuza adım adım ilerleyelim.
Öncelikle GridView sınıfından bir örneği sayfamıza sürükler
<asp:GridView ID="GridView1" runat="server" />

Tabii bu tagın arasına eklenecek çok şey var, bunlardan bir kısmı ekleyeceğim.
Örneğin: AutoGenerateColumns="false"
Ama ben GridView anlatacak değilim, size faydası dokunacak genelde gözden kaçan bir kaç şeyden bahsedeğim.
  • Örneğin: DataKeyNames="ProductID"... DataKeyNames bizim için Kayıt Silme, Düzenleme işlemleri için tablomuzdaki Primary Key alanımızdır.Bu alan tablomuzda hangi satırın silineceğini veya güncelleneceğini diğer satırlarla(tablodaki kayıtlarla) karışmadan gösterecektir.
  • Columns ile GridView içindeki göstermek istediğimiz tüm alanları görüntüleyeceğiz.
  • TemplateField, ile kolonu eğer Edit ya da düz haliyle görüntülemek istediğimizde hangi bileşenleri kullanacaksak burada her kolon için bir TemplateField oluşturup içine ItemTemplate ve EditItemTemplate leri yerleştiriyoruz.
  • ItemTemplate ile verimizi göstereceğimiz kolonumuzu hangi bileşenlerle görüntüleyeceksek bu bileşenleri içerir.
  • EditItemTemplate ile verimizi editleyeceğimiz kolonumuzu hangi bileşenlerle görüntüleyeceksek bu bileşenleri içerir.
  • BoundField ile de hiç template arasına almayıp label içinde görüntüleyeceğimiz alanlarımızı gösteriyoruz.

<Columns>

<asp:TemplateField HeaderText="RowIndex">

<ItemTemplate>
<asp:Label ID="lblRowIndex" runat="server" Text='<%# Bind("tel1") %>' />
</ItemTemplate>

<EditItemTemplate>
<asp:TextBox ID="lblRowIndex" runat="server" Text='<%# Bind("tel1") %>' />
</EditItemTemplate>

</asp:TemplateField>

<asp:BoundField HeaderText="Name" DataField="Name" />
<asp:BoundField HeaderText="ListPrice" DataField="ListPrice" />
<asp:BoundField HeaderText="SellStartDate" DataField="SellStartDate" />

</Columns>


Buraya kadar küçük bir özette yapmış olduk.Şimdi Dinamik TemplateColumn oluşturma işine bakalım.
İhtiyaçlarımız:
Bir adet DataTable (DataSource olarak kullanacağız)
Bir adet GridView
Bir adet ITemplate interface ini referans alan TemplateColumn sınıfı

Şimdi bunları neden ve nasıl biraraya getireceğiz sorularını cevaplayalım.
  1. DataTable sınıfından bir nesne türeteceğiz ve içine bir kaç satır veri ekleyeceğiz.Çünkü sayfamıza yerşeştirdiğimiz GridView için DataSource olacak bu tablo.
  2. Sayfamızdaki GridView verilerimi gösterdiğimiz düzenlediğimiz nesnemiz olacak.İki template şablonumuz olacak GridView içinde çalışma zamanında üretilen:
    1. Birisi, sayfa ekrana gelir gelmez verileri Label lar içinde gösteren,
    2. diğeride Edit düğmesine basılması halinde TextBox içerisinde gösteren.
Şimdi DataTable nesnemizi tüm page içerisinde erişilen bilen bir değişken olarak tanımlayalım:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
public partial class _Default : System.Web.UI.Page 
{
    DataTable dt = new DataTable();


Bir de bu DataTable içini doldurmamız gerekecek.Bunun için bir fonksiyon yazalım:
    public void dtBuild()
    {
        DataColumn dc_1 = new DataColumn( "isim" );
        DataColumn dc_2 = new DataColumn( "meslek" );
        dt.Columns.Add( dc_1 );
        dt.Columns.Add( dc_2 );
 
        DataRow dr = dt.NewRow();
        dr["isim"] = "Cem";
        dr["meslek"] = "2";
        dt.Rows.Add( dr );
        DataRow dr1 = dt.NewRow();
        dr1["isim"] = "Cenk";
        dr1["meslek"] = "1";
        dt.Rows.Add( dr1 );
        DataRow dr2 = dt.NewRow();
        dr2["isim"] = "Cengo";
        dr2["meslek"] = "3";
        dt.Rows.Add( dr2 );
    }

Şimdiii, sayfamız ekrana ilk geldiğinde GridView1 nesnemizin dt ile dolması ve kolonları kendi otomatik üretsin diye, AutoGenerateColumns özelliğini TRUE yapacağız ama editlendiğinde FALSE olacak ki biz TemplateColumn özelliği ile sütunlarımızı değiştirebilelim. O halde Page_Load metodumuza bir bakalım:
    protected void Page_Load( object sender, EventArgs e )
    {
        if ( !IsPostBack )
        {
            dtBuild();
            GridView1.AutoGenerateColumns = true;
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
        else
        {
            GridView1.AutoGenerateColumns = false;
        }
    }


Bu da güzel oldu.Yukarıyı anlatmak gerekirse, dtBuild() fonksiyonu ile DataTable sınıfından türettiğimiz dt nesnemizin içini satırlarla dolduruyoruz.

GridView1.AutoGenerateColumns = true;
ile de dt içindeki kolonları otomatik olarak türetmesini istiyoruz.Bunu ileride yine TemplateColumn larla değiştireceğiz.

GridView1.DataSource = dt;
GridView1.DataBind();
Burada GridView1 nesnemizin DataSource özelliğini dt nesnemize atıyor ve verileri göstermek için DataBind() metodunu çalıştırıyoruz.

E bu da güzel. Şimdi biz Edit lemeye(düzenlemeye geçelim).

11 Aralık 2007 Salı

DataGrid e kod ile TEMPLATECOLUMN eklemek

Bu aslında hafif bir çeviri olacak.Ama önemli ve geyik olmayan yerler için zamanım var.
Adresimiz: http://www.tek-tips.com/faqs.cfm?fid=4868

ITemplate Interface Hakkında...

Template kolonu çalışma zamanında oluşturmak çok kolaydır. Genel şekli aşağıdaki gibidir:
------------------
TemplateColumn tc = new TemplateColumn();
tc.HeaderText = [Text of column header];
tc.ItemTemplate = [ITemplate type];
// dg is the DataGrid control
dg.Columns.Add(tc);
------------------

Yukarıda da gördüğünüz gibi, basitçe TemplateColumn değişkeni üretebilir, Text ve ItemTemplate özelliklerini verebiliriz.Devam edelim.Önemli kısmı ItemTemplate özelliğidir. Gördğünüz gibi bir sınıf tanımlamalı ItemTemplate Interface inden türeyen.Böylece template column u üretip gride eklemek mümkün olacaktır.Thus, adding a template column to a grid at run time will consist of creating a class that implements the ITemplate interface. Bu sınıfın nasıl olduğunu şimdi göreceğiz.

Şimdi, ITempalte interface'nin sadece bir tane metodu vardır, InstantieateIn adında.Bu metod yeni bir örnek template kolon üretildiğinde çalışacaktır.System.Web.UI.Control tipinde bir parametre alır . Böylece bu metodu ile örneklediğiniz nesneyi oluşturduğunuz yerde template column create olmuş olur.(cümle berbat oldu ama idare edin). Benim durumumda bir check box a ihtiyacım olacak template columnun içinde ve sınıfım şöyle görünecek:

private class CheckBoxTemplate : ITemplate
{
// Implementation of ITemplate
public void InstantiateIn(System.Web.UI.Control container)
{
// Create a check box
CheckBox cb = new CheckBox();
// Make the check box appear in the column
container.Controls.Add(cb);
}
}


Hepsi bu! Bu template column oluşturmak için ihtiyacınız olan kod. Düşündüğünüz gibi, sizde text box ın özelliklerini set ettiğiniz gibi her ne kontrol oluşturuyorsanız template column içinde, onunda özelliklerini dilediğiniz gibi set edebilirsiniz. Yanı sıra, sadece bir kontrol kullanmaklada sınırlı değilsiniz. Dilediğiniz sayıda Template Column içine nesneler create edebilirsiniz(create etmek ne demekse) ...


Data Biding (veri bağlama)
Fakat hepsi bu değil! InstantiateIn metodu içinde veri çekmek ve kontrolonüze bağlamak mümkün. Veri bağlamayı uyarlamak, create ettiğiniz kontrolünüzün DataBinding olayına kod yazmakla mümkün olacak. Event handling(olaylarla başa çıkma) mekanizması Web ve Windows formlarındakiyle aynıdır: Bir metod create edersiniz aynı olayın temsilcisinin imzasıyla(isaretiyle) ve sonra temsilciye metodu eklersiniz. Sınıfınızın son hali kalın kısımla gösterilmiş:
[Yani diyorki bir metodu oluşturup DataBinding metoduymuş gibi sınıfınıza eklersiz. İşte yeni metodunuz,BindCheckBox ve bunu DataBinding işlemi halinde çalışması için sınıfınıza ekliyorsunuz...]

CODE

private class CheckBoxTemplate : ITemplate
{
public void InstantiateIn(System.Web.UI.Control
container)
{
// Create a check box
CheckBox cb = new CheckBox();
//Attach method to delegate
cb.DataBinding += new System.EventHandler(this.BindCheckBox);
container.Controls.Add(cb);
}

//Method that responds to the
DataBinding event

private void BindCheckBox(object sender, System.EventArgs e)
{
CheckBox cb = (CheckBox)sender;
DataGridItem container = (DataGridItem)cb.NamingContainer;
cb.Checked = [Data binding expression];
}
}
Gördüğünüz gibi, InstantiateIn metoduna yeni bir satır kod eklendi:

cb.DataBinding += new System.EventHandler(this.BindCheckBox);

Tüm bu eklemeler checkbox kontrolümüzün DataBinding event ında BindCheckBox methodunu çalıştırmak içindi. DataBinding event temsilcisinin iki parametresi vardır: object tipinde sender, ve EventArgs tipinde e,(Gerçekten bir databinding e ihtiyacımız yok). sender, harektin başladığı check box nesnesini gösterir , ve bu yüzden aşağıdaki koda ihtiyacımız vardır:

CheckBox cb = (CheckBox)sender;

Basitçe CheckBox gibi bir referansı getirir. Şimdi check boxın NamingContainer özelliği CheckBox kontrolünün olduğu DataGridItem(diğer bir değişle, satır(row)) u gösterir. Böylece Böylece aşağıdaki satırda grid içinde CheckBox ın olduğu satıra ulaşabiliriz:

DataGridItem container = (DataGridItem)cb.NamingContainer;

Sonuçta, &quot;ItemID&quot; adında bir veri kaynağından çektiği veriyi gösteren bir DataGrid imiz olduğunu farzedersek, veri bağlama ifadesini DataBinder.Eval metodunu kullanarak yazabiliriz. Aşağıdaki satırda(yukarıdaki kod olmayan) CheckBox ın Checked özelliğini, eper "ItemId" veri kaynağında 10 ise True olarak set edecektir.


cb.Checked = (DataBinder.Eval(container.DataItem, "ItemID").ToString() == "10";);

Bu durumda Eval metodunun ne olduğunu bilmiyorsunuz.DataGridItem(DataGrid içinde bir row demektir DataGridItem) içerisinde row içerisindeki bir alanın değerini, object tipinde döndüren bir metoddur. Elbette verilerinizi bağlayan ifadeniz daha karmaşık olabilir.Bu metodda dilediğiniz şeyi yapabilirsiniz...

Son olarak kalın ile yazılmış hali ile ItemTemplate inizi Template Column kısmına ekleyebilirsiniz.

TemplateColumn tc = new TemplateColumn();
tc.HeaderText = [Text of column header];
//Isn't this beautiful?
tc.ItemTemplate = new CheckBoxTemplate();
// dg is the DataGrid control
dg.Columns.Add(tc);

Cool, eh?

20 Ekim 2007 Cumartesi

Visual Studio kodlarınızı HTML olarak kaydedin. CopySourceAsHtml

VS.2005 ile bloglarım için yazdığım kodları html olarak kaydetmede kolaylık olsun diye arama yapmıştım.Mcrsft'un her geliştiricinin sahip olması gerek dediği sayfada buldum kendimi. Orada CopySourceAsHtml bağlantısına tıkladım ve add-in'in installer halini indirdim.

Ama o da ne?

"CopySourceAsHTML was unable to access the clipboard." hatasını almaya başladım hemen googleladım bunu, veeee EVREKA. connect.cs ve clipboard.cs üzerinde iki değişiklikle sorun giderildi.

Değişiklikleri yapıp CopySourceAsHtml.dll dosyasını oluşturup
C:\Documents and Settings\kullanici_adi\My Documents\Visual Studio 2005\Addins
klasöründeki dosya ile değiştirdim ve çalışıyor artık. CopySourceAsHtml.dll dosyanın internette derlenmiş halini indirmek istediğimde 2Kb diyordu.Haliyle bunu derleyince sizinle paylaşıp gerçek CopySourceAsHtml.dll dosyaya kavuşmanızı sağlamak istedim.

Ne güzel değil mi :)

File Style:

border-top: windowtext 1pt solid;
border-top-color: #CCCCCC;
padding-top: 1pt;
border-left: windowtext 1pt solid;
border-left-color: #CCCCCC;
padding-left: 1pt;
border-right: windowtext 1pt solid;
border-right-color: #CCCCCC;
padding-right: 1pt;
border-bottom: windowtext 1pt solid;
border-bottom-color: #CCCCCC;
padding-bottom: 1pt;
width: 100%;
overflow: auto;
background-color: #F5F5F5;

14 Ekim 2007 Pazar

Smartphone 2003 için sms kilitleme programı nasıl yazıldı... - 1 -

Geçen gün valide cep telefonum ile anneannem ile görüşmüş ama geri getirdiğinde mesajımın okunduğunu farketmiştim. Özel hayatıma bu müdahaleyi daha önceden smartlock programını motorola mpx200 cep telefonuma(smartphone işletim sistemlidir kendisi) kurarak bir süre önlemiş idim. Ama expire oldu :(

Smartphone programımı yazmak zorunda kaldığımı bu durum ile anladım ve bu işe koyuldum.Tamda Şükür Bayramınının 2. günü akşamında. Başladığımda biraz zaman alacaktı çünkü buradaki yapınının bildiklerimden ne kadar farklı ve benzer olduğunu bilmiyordum.Ben bildiğim ve yeni öğrendiğim herşeyi buraya yazacağım. Biraz bildiklerimizin zekatını vermiş olalım.

Önce basit bir smart device uygulaması buldum. Mobil cihazlarda pil durumu bilgisini alabileceğim. Buradaki yazıda geçen DLLImport, Platform Invocation nedir diye bir öğrenelim biliyorsak hatırlayalım.

Öncelikle VC++ ile yazılmış bazı kütüphanelerin C# içinde kullanılması gerekecek.Buna platform invoke diyoruz. Win32 apilerinin C# içinde kullanımı ile ilgili güzel bir makale var csharpnedir.com adresinde.Bu makale ve başka yerli yabancı makalelerden alıntılar ile anlatımıma devam edeceğim.

Win32 sistem fonksiyonları kullanıldığında, kod CLR tarafından yönetilmekten çıkar. .NET ortamında geliştirilen bir uygulamada yönetilmeyen kod segmenti ile kaşılaşılırsa ilgili kod segmenti CLR tarafından yönetilmekten çıkar. Dolayısıyla "garbage collection" mekanizması ve .NET'e özgü diğer servisler kullanım dışı olur.

Tabii unmanaged kodlar daha hızlı çalışmasını sağlar.

CLR tarafından yönetilmeyen kodlara erişebilmek için C#'ta System.Runtime.InteropServices isim alanında bulunan ve DllImprtAttribute sınıfını temsil eden DllImport niteliği kullanılmaktadır. DllImport niteliği ile harici bir kaynakta bulunan metoda referans vermek için external anahtar sözcüğü kullanılır. Bir sınıf bildiriminin en başında external anahtar sözcüğü ve DllImport niteliği kullanılarak CLR tarafından yönetilmeyen bir metot bildirimi yapılır. Tabi metodun gövdesi harici bir kaynakta zaten var olduğu için bizim metodun gövdesini yazmamızın bir anlamı yoktur. Ardından bu metot sınıfın istenildiği yerinde kullanılabilir. İsterseniz basit bir örnekle DllImport niteliğinin kullanımını gösterelim.

Win API(Application Interface) windows sistemlerinin programlanabilir arayüzünü içermektedir. Windows uygulamarının tamamı bu arayüzdeki fonksiyonları ve diğer yapıları kullanmaktadır. Aşağıdaki programda Win32 sistemlerinde bulunan MessageBox() fonksiyonunun kullanımına bir örnek verilmiştir.




using System;
using System.Runtime.InteropServices;
class Class1
{
[DllImport("user32.dll")]
public static extern int MessageBox(int tip,string mesaj,string baslik,int secenek);
static void Main()
{
MessageBox(0,"Mesaj","Win API MessageBox",2);
}
}



DllImport Attribute sınıfının bir tane yapıcı metodu bulunmaktadır. Bu metot parametre olarak harici kaynağın adı belirtmektedir. Yukarıdaki kaynak kodda MessageBox fonksiyonunun bulunduğu "user32.dll" isimli dosya DllImport niteliğine parametre olarak verilmiştir. Bu örnekte dikkat edilmesi gereken diğer nokta ise extern anahtar sözcüğünün kullanımıdır. Bu anahtar sözcük ile bildirimi yapılan metodun harici bir dosyada olduğu belirtilmektedir. Dolayısıyla C# derleyicisi metodun gövdesini kaynak kodda aramayacaktır.


Gövdesi yüklenmeyen metod belleğe yüklenir ve bellekteki metodun başlangıç adresi saklanır.DLLIMPORT ve WinAPI kullanımı makalede daha detaylı anlatılmıştır, okumanızı şiddetle tavsiye ederim.

Microsoft bize bir aygıtın güç durumunu nasıl öğrenebileceğimizi C# kodu ile anlatmış.
Biz buradaki yazıyı biraz inceleyeceğiz. P/Invoke ile SYSTEM_POWER_STATUS_EX sınıfı pil ve enerji durumu bilgileri ile dolacak ve bu bilgileri formumuzun üzerinde progressbar bileşeni ile göstereceğiz.
SYSTEM_POWER_STATUS_EX sınıfı tabii smartphone üzerine yazdığımız için SDK Documentation for Windows Mobile-Based Smartphones başlığından takip edilecek.


typedef struct _SYSTEM_POWER_STATUS_EX {
BYTE ACLineStatus;
BYTE BatteryFlag;
BYTE BatteryLifePercent;
BYTE Reserved1;
DWORD BatteryLifeTime;
DWORD BatteryFullLifeTime;
BYTE Reserved2;
BYTE BackupBatteryFlag;
BYTE BackupBatteryLifePercent;
BYTE Reserved3;
DWORD BackupBatteryLifeTime;
DWORD BackupBatteryFullLifeTime;
} SYSTEM_POWER_STATUS_EX, * PSYSTEM_POWER_STATUS_EX, * PSYSTEM_POWER_STATUS_EX;


typedef struct _SYSTEM_POWER_STATUS_EX ile öncelikle bir yapı(pascaldaki record gibi) tanımlıyoruz. Bu yapının 12 değişkeni var ve bu değişkenler bizim istediğimiz pile ait bilgiler ile dolacak.

Örneğin:
ACLineStatus BYTE tipinde değer alıyor ve bize AC güç durumunu gösterecek.Değerleri aşağıdadır.
Değer -- Tanımı
0 -----> Offline
1 -----> Online
2 -----> Backup power
255 ---> Unknown status


Visual Studio ile SmartPhone için bir proje başlatıyoruz. C# dili kullanarak yazacağız.

GetSystemPowerStatusEx bize pil bilgilerini getirecek fonksiyondur ve coredll içerisinde yer almaktadır.

Smartphone işletim sistemindeki "coredll" dllini P/Invoke ile kullancağız.

Formun ü zerine iki textbox bileşeni koyarak şarj edilme durumunu ve pilin kalan enerjisinin yüzde olarak değerini Text değerlerine yazacağız.

Bunun için önce coredll içerisinde tanımlı "typdef struct SYSTEM_POWER_STATUS_EX" diye tanımlı değişkeni (pil bilgilerinin döndürüleceği struct tipinde değişkendir) sınıf olarak tanımlamalıyız.

[DllImport( "coredll" )]
public static extern uint GetSystemPowerStatusEx( SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate );
Yukarıda extern, DllImport ile ilgili bilgiler verilmişti.Biz GetSystemPowerStatusEx metoduna, SYSTEM_POWER_STATUS_EX sınıfının bir örneğini ve anlık donanım bilgisi isteyip istemediğimizi bildiren bool değerini göndermeliyiz.


public class SYSTEM_POWER_STATUS_EX
{
public byte ACLineStatus;
public byte BatteryFlag;
public byte BatteryLifePercent;
public byte Reserved1;
public uint BatteryLifeTime;
public uint BatteryFullLifeTime;
public byte Reserved2;
public byte BackupBatteryFlag;
public byte BackupBatteryLifePercent;
public byte Reserved3;
public uint BackupBatteryLifeTime;
public uint BackupBatteryFullLifeTime;

[DllImport( "coredll" )]
public static extern uint GetSystemPowerStatusEx( SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate );
}


Buraya kadar kullanacağımız sınıf ve P/Invoke metodumuz tanımlandııı...
Şimdi sol düğmeye(Soft Key1) bastığımızda aşağıdaki kodlarımızı işletmeliyiz. Bu koda göre SYSTEM_POWER_STATUS_EX tipinde bir instance(nesne) oluşturuyor ve SYSTEM_POWER_STATUS_EX.GetSystemPowerStatusEx() metodumuza parametre olarak gönderiyoruz. Bu nesne pil durumu bilgisi ile doldurularak bize geri gönderiliyor.Bu nesnenin içindeki değişkenlerin değerlerinden "BatteryLifeTime" ve "BatteryFlag" değişkenlerinin değerlerini TextBox bileşenlerinin Text özelliklerine yazıyoruz.


private void menuItem1_Click( object sender, EventArgs e )
{
SYSTEM_POWER_STATUS_EX pilDurumu = new SYSTEM_POWER_STATUS_EX();
if ( SYSTEM_POWER_STATUS_EX.GetSystemPowerStatusEx( pilDurumu, true ) == 1 )
{
float f_kalanDakika = pilDurumu.BatteryLifeTime / 3600;
txt_lifeTime.Text = f_kalanDakika.ToString();

Hashtable hsh_sarjDurumu = new Hashtable();
hsh_sarjDurumu.Add( "1", "Yüksek" );
hsh_sarjDurumu.Add( "2", "Düşük" );
hsh_sarjDurumu.Add( "4", "Kritik Seviye" );
hsh_sarjDurumu.Add( "8", "Şarj ediyor" );
hsh_sarjDurumu.Add( "128", "Sistem Pili Yok" );
hsh_sarjDurumu.Add( "255", "Bilinmeyen Durum" );
txt_sarjDurumu.Text = hsh_sarjDurumu[ pilDurum.BatteryFlag.ToString() ].ToString();
}
}



Buraya kadar pil durumunu gösteren program ile smartphon'umuza başlangıç yaptık.
Bakalım devamı gelecek mi :)

.NET NameSpace lerinden...

.NET Class Framework için üst yapıya “namespace” (ad uzayı) adı verilir. Bu ad uzaylarından önemli olan bazılarının işlevselliği şöyle sıralanabilir :

Microsoft.CSharp
C# dilini kullanarak derleme ve kod üretimini destekleyen sınıfları içerir.

Microsoft.JScript
Jscript dilini kullanarak derleme ve kod üretimini destekleyen JScript runtime ve sınıflarını içerir.

Microsoft.VisualBasic
Visual Basic .NET runtime’ı içerir. Bu runtime Visual Basic .NET dili tarafından kullanılır. Bu ad uzayı, aynı zamanda Visual Basic .NET dili için derleme ve kod üretimi ile ilgili sınıfları da içerir.

Microsoft.Vsa
.NET Framework için, runtime’da kullanılmak üzere script motorlarını (script engines) uygulamalara script gömmeyi sağlayan ara yüzleri içerir.

Microsoft.Win32
İki tip sınıf sunar: işletim sistemince üretilen olayları işleyenler ve sistem kayıtlanmasını (system registry) işleyenler.

System
Ortak kullanıma sahip değerleri, referans edilen veri tiplerini, olayları ve bunların işleyicilerini, ara yüzleri, özellikleri ve işlem hatalarını tanımlayan temel sınıfları içerir. Sistem tipleri ve derleyici tarafından otomatik olarak sunulan Object sınıfını içerir.

System.CodeDom
System.CodeDom.Compiler
System.Collections
Çeşitli nesne koleksiyonlarını tanımlayan ara yüz ve sınfları içerir (list, queue, bit array, hash table ve dictionary gibi).

System.Collections.Specialized
System.ComponentModel
System.ComponentModel.Design
System.ComponentModel.Design.Serialization
System.Configuration
Program içinden .NET Framework konfigürasyon ayarlarına erişim sağlayan ara yüz ve sınıfları içerir.

System.Configuration.Assemblies
Bir assembly konfigürasyonunu değiştirmeyi sağlayan sınıfları içerir.

System.Configuration.Install
System.Data
Çoğunlukla, ADO.NET mimarisinin temelini içeren sınıflardan oluşur. ADO.NET mimarisi çoklu veri kaynaklarından gelen veriyi etkin bir şekilde yöneten bileşenlerin gerçekleştirimini sağlar. Bağlantısız bir ortamda (Internet gibi), ADO.NET çok katmanlı sistemler için veri istemi, ekleme ya da günleme gibi işlemlere ait araçları sunar. ADO.NET mimarisi aynı zamanda, Windows Forms veya ASP.NET ile yaratılmış HTML sayfaları gibi, istemci uygulamalarında da gerçekleştirilir.

System.Data.Common
System.Data.OleDb
OLE DB .NET Data Provider’ı içerir. Bir .NET veri sağlayıcısı yönetimli uzayda, veritabanı gibi, veri kaynaklarına erişim için bir sınıflar koleksiyonu tanımlar.

System.Data.SqlClient
SQL Server .NET Data Provider’ı içerir. Bir .NET veri sağlayıcısı yönetimli uzayda, veritabanı gibi, veri kaynaklarına erişim için bir sınıflar koleksiyonu tanımlar.

System.Data.SqlTypes
SQL Server içindeki veri tipleri için sınıfları tanımlar. Bu sınıflar, diğer alternatif veri tiplerine göre daha güvenli ve hızlıdır. Bu sınıfların kullanılmasıyla, olası tip dönüşümü problemlerinin de önüne geçilmektedir.

System.Diagnostics
Sistem süreçleri, olay logları ve performans sayaçları ile etkileşim için gerekli sınfları sağlar. Bu ad uzayı aynı zamanda kodun adım adım işletimi ya da hata ayıklama için sınıflara da sahiptir.

System.Diagnostics.SymbolStore
System.DirectoryServices
System.Drawing
GDI+ temel grafik işlevselliğine erişim sağlar.

System.Drawing.Design
System.Drawing.Drawing2D
System.Drawing.Imaging
İleri düzey GDI+ görüntüleme işlevselliğini sağlar.

System.Drawing.Printing
Yazdırma işlemleriyle ilgili sevisler sağlar.

System.Drawing.Text
System.EnterpriseServices
Kurumsal uygulamalar için önemli bir alt yapı sağlar. Kurumsal bir ortamda bileşen programlama modeli için COM+ servis mimarisi sağlar. Bu ad uzayı .NET Framework nesnelerini kurumsal uygulamalar için daha pratik hale getirir.

System.EnterpriseServices.CompensatingResourceManager
System.Globalization
Kültürel bilgiyi tanımlayan sınıfları içerir (dil, ülke/bölge, kullanımdaki takvim, tarih, para birimi ve sayıların kullanımıyla ilgili bilgi vb.).

System.IO
Akımlar ve dosyalar üzerinden, senkron ve asenkron okuma ve yazmayı sağlayan tipleri içerir.

System.IO.IsolatedStorage
System.Management
System.Management.Instrumentation
System.Messaging
System.Net
Günümüz bilgisayar ağlarında kullanılan birçok protokol için basit ve programlanabilir bir ara yüz sağlar. “WebRequest” ve “WebResponse” sınıfları “pluggable protocols” (her protokolün özel ayrıntılarıyla ilgilenmeden , Internet kaynaklarını kullanan uygulamalar için ağ servisleri geliştirimi) için temel oluşturur.

System.Net.Sockets
Ağ erişimi için sıkı bir kontrole ihtiyaç duyan geliştiriciler için, Windows Sockets (Winsock) arayüzüne yönetimli bir gerçekleştirim sağlar.

System.Reflection
System.Reflection.Emit
System.Resources
System.Runtime.CompilerServices
System.Runtime.InteropServices
System.Runtime.InteropServices.Expando
System.Runtime.Remoting
Dağıtık uygulamalar yaratmak için gereken sınıf ve ara yüzleri içerir.

System.Runtime.Remoting.Activation
System.Runtime.Remoting.Channels
Uzaktaki bir nesnenin bir metodunun bir istemci tarafından çağrımında kullanılan ulaştırma ortamı olan kanal ve kanal havuzlarını işleyen ve destekleyen sınıfları içerir.

System.Runtime.Remoting.Channels.Http
HTTP protokolünü kullanan kanalları içerir.

System.Runtime.Remoting.Channels.Tcp
TCP protokolünü kullanan kanalları içerir.

System.Runtime.Remoting.Contexts
System.Runtime.Remoting.Lifetime
System.Runtime.Remoting.Messaging
System.Runtime.Remoting.Metadata
System.Runtime.Remoting.Metadata.W3cXsd2001
System.Runtime.Remoting.MetadataServices
System.Runtime.Remoting.Proxies
System.Runtime.Remoting.Services
System.Runtime.Serialization
System.Runtime.Serialization.Formatters
System.Runtime.Serialization.Formatters.Binary
System.Runtime.Serialization.Formatters.Soap
System.Security
İzinler için temel sınıfları da içeren, “Common Language Runtime” güvenlik sisteminin altında yatan yapıyı sağlar.

System.Security.Cryptography
Birçok başka işlemle birlikte (hashing, şansa dayalı sayı üretimi gibi) güvenli “encoding” ve “decoding” içeren “kriptografi servisleri” sağlar.

System.Security.Cryptography.X509Certificates
System.Security.Cryptography.Xml
System.Security.Permissions
Politikaya bağlı olarak işlemlere ve kaynaklara erişimi kontrol eden sınıfları tanımlar.

System.Security.Policy
System.Security.Principal
System.ServiceProcess
Windows servis uygulamaları gerçekleştirmeyi, yüklemeyi ve denetlemeyi sağlayan sınıfları sağlar.

System.Text
ASCII, Unicode, UTF-7 ve UTF-8 character encoding’i temsil eden sınıfları içerir.

System.Text.RegularExpressions
“.NET Framework regular expression engine” için erişim sağlayan sınıfları içerir. Bu ad uzayı Microsoft .NET Framework ile çalışabilen her dil ya da platformdan kullanılabilen “regular expression” işlevselliği sağlar.

System.Threading
Çoklu iş parçacıkları programlamayı sağlayan sınıf ve ara yüzleri içerir.

System.Timers
Belli bir aralıkta olay tetiklemeyi sağlayan Timer bileşenini sağlar.

System.Web
İstemci/sunucu iletişimini sağlayan sınıf ve arayüzleri sağlar. Bu ad uzayı o anki http istemiyle ilgili bilgi içeren “HTTPRequest” sınıfını, istemciye giden çıktıyı yöneten “HTTPResponse” sınıfını ve sunucu taraflı süreçler için erişim sağlayan “HTTPServerUtility” nesnesini içerir. “System.Web” aynı zamanda cookie işleme, dosya transferi, istisna bilgisi (exception information) ve çıktı ön bellekleme denetimini de içerir.
System.Web.Caching
Sunucudaki kaynaklardan en sık kullanılanları ön belleğe almayı sağlayan sınıfları içerir.
System.Web.Configuration
System.Web.Hosting
System.Web.Mail
CDOSYS mesaj bileşenini kullanarak, mesaj oluşturma ve gönderebilmeyi sağlayan sınıfları içerir. Posta mesajı Microsoft Windows 2000’de kurulu bulunan SMTP mail servisi ile ya da herhangi bir sıradan SMTP sunucusu üzerinden gönderilir. Bu ad uzayı içindeki sınıflar ASP.NET ya da herhangi bir yönetimli uygulama içinden kullanılabilir.

System.Web.Security
Web sunucu uygulamalarında ASP.NET güvenliğinin gerçekleştirimi için kullanılan sınıfları içerir.

System.Web.Services
Web servislerinin oluşturulması ve kullanımı için gereken sınıfları içerir. Bir web servisi, web sunucusu üzerinde bulunan ve standart Internet protokolleri üzerinden dışa açılan programlanabilir birimlerdir.

System.Web.Services.Configuration
System.Web.Services.Description
System.Web.Services.Discovery
System.Web.Services.Protocols
System.Web.SessionState
Sunucudaki bir web uygulaması içinde tek bir istemciye özel verinin tutulmasını sağlayan ara yüz ve sınıfları sağlar. Oturum durum verisi (SessionState), kullanıcıya uygulamayla sürekli bir bağlantı varmış hissinin verilmesi için kullanılır. Durum bilgisi yerel süreç belleğinde veya “Web farm” konfigürasyonlarında ASP.NET State Service veya bir SQL Server veritabanı ile süreç dışı olarak bulunabilir.

System.Web.UI
Bir web sayfası üzerinde kullanıcı ara yüzünü oluşturan kontrollerin yaratılması için gereken sınıf ve ara yüzleri sağlar. Bu ad uzayı, ortak bir işlevsellikle HTML ya da web kullanıcı kontrolleri olmak üzere tüm kontrolleri içeren “Control” sınıfına sahiptir. Web uygulamasındaki bir sayfaya istem olduğu anda oluşturulan, “Page” kontrolünü de içerir.

System.Web.UI.Design
System.Web.UI.Design.WebControls
System.Web.UI.HtmlControls
Bir web sayfası üzerinde HTML sunucu kontrolleri yaratmayı sağlayan sınıfları sağlar. HTML sunucu kontrolleri sunucuda çalışır ve her tarayıcı tarafından desteklenen standart HTML tag’leriyle temsil edilirler. Bu durum, bir web sayfasındaki HTML elemanlarının program içinden kontrol edilebilirliğini sağlar.

System.Web.UI.WebControls
Bir web sayfası üzerinde web sunucusu kontrolleri yaratabilmeyi sağlayan sınıfları içerir. Web kontrolleri sunucuda çalışırlar ve “calendar” gibi özel amaçlı kontrollerle beraber düğme ve metin kutusu gibi form kontrollerini içerirler. Bu, web sayfası üzerindeki kontrollere program içinden erişebilmeyi sağlar. Web kontrolleri HTML kontrollerinden daha soyuttur. Nesne modelleri HTML sözdizimini yansıtmaz.

System.Windows.Forms
Windows tabanlı, Microsoft Windows işletim sisteminin sahip olduğu zengin kullanıcı ara yüzü olanaklarını kullanan uygulamaları yaratabilmek için gereken sınıfları içerir.

System.Windows.Forms.Design

System.Xml

XML işleme dili için standartlara dayalı destek sağlar.
System.Xml.Schema
Standartlara dayalı XML Schema’ları (XSD) için destek sağlar.
System.Xml.Serialization
XML biçiminde döküman ya da akımlara nesnelerin belli andaki halinin saklanmasını sağlayan sınıfları içerir.
System.Xml.XPath
XPath ayrıştırıcısı ve değerlendirme motorunu içerir. “W3C XML Path Language (XPath) Version 1.0 Recommendation” (www.w3.org/TR/xpath)’ı destekler.
System.Xml.Xsl
“Extensible Stylesheet Transformation” (XSLT) için destek sağlar. W3C XSL Transformations (XSLT) Version 1.0 Recommendation (www.w3.org/TR/xslt)’ı destekler.



System.Object Sınıfı:
Tüm .NET yönetimli sınıflar System.Object sınıfından kalıtımla gerçekleştirilir. Bu kalıtım VB ve C# gibi dillerde derleyici tarafından otomatik olarak gerçekleştirilir. Ayrıca Object sınıfı hiyerarşinin en üstünde yer aldığından, bu tipteki bir değişkene diğer nesne referansları atanabilir. Object sınıfı diğer tüm sınıflar için de kalıtımla ortak hale gelen şu metodları içerir :

Object:
Equals(), GetHashCode(), MemberwiseClone(), Finalize(), GetType() , ToString()



System.Exception Sınıfı Ve Hata Yönetimi :
İstisnalar ile .NET Framework tutarlı bir hata yönetimi sağlar. Hata oluşabilecek noktalarda (IO işlemleri gibi..) “try” ve “catch” anahtar sözcükleri yardımıyla istisnanın oluşması durumunda ne yapılması gerektiği belirlenir.

Öncelikle, hataya sebep olabilecek kod “try” bloğu içine yazılır ve hatanın oluşması durumunda yürütülmesi istenen kod “catch” bloğu içine yazılır.


try
{
//hataya sebep olabilecek kod
}
catch(Exception e)
{
//hata yönetim kodu
}


Örnek kodda “catch” bloğunda “e” ile tanımlanan değişken sayesinde kodun işletiminde eğer bir hata varsa bu hatanın içeriği hakkında bilgi edinmeyi sağlar.

Herhangi bir işlem için yazılan kodda belli bir durum için istisna oluşması isteniyorsa bu durumda da, “throw” anahtar sözcüğü sayesinde istisna oluşması sağlanabilir.

Ayrıca hata oluşması ya da oluşmaması durumlarından bağımsız olarak belli bir kodun (her iki durumda da) işletilmesi isteniyorsa “finally” anahtar sözcüğü kullanılır ve gereken kod “finally” bloğunda gerçekleştirilir.



System.Collectionsı ve koleksiyonların kullanımı:
Koleksiyon kullanımı için en iyi örnek ArrayList olabilir.


//Öncelikle bir ArrayList nesnesi yaratalım
ArrayList ornek = new ArrayList();


ArrayList için önemli işlemler koleksiyona elemen ekleme, koleksiyondan eleman silme ve koleksiyon içindeki belli bir elemana erişmedir.


//Ekleme için
ornek.Add(“ilk eleman”);
ornek.Add(2);

//Silme için
ornek.Remove(“ilk eleman”);
ornek.RemoveAt(0);


Ve elemanlara erişim :

ornek[0] şeklinde indekse göre referasla gerçekleştririlir.

Burada dikkat edilmesi gereken, ArrayList içindeki elemanların Object şeklinde tutulmasıdır. Bunun anlamı ArrayList içindeki elemanlara erişimde, erişilecek olan elemanın tipine “cast” işlemi gerçekleştirilmelidir.


OrnekSinif ornekNesne=new OrnekSinif ();
ornek.Add(ornekNesne);
//bu objeyi tekrar elde etmek için
OrnekSinif ornekNesneYeni=((OrnekSinif)ornek[0]);


Kaynak: sorucevap.com

Platform Invoke nedir ? (Platform Invocation Services)

unmanaged olarak yazılmış fonksiyonların managed ortamda çağırılıp çalıştırılabilmesidir. yani .NET dilleri içinde unmanaged olarak yazılmış bir fonksiyonun çalıştırılabilmesi olayıdır. Tam adı Platform Invocation Services'tir fakat Platform Invoke olarak geçer, birçok yerde de P/Invoke denir. .NET'in yetersiz veya yavaş kaldığı yerlerde hızır gibi imdadımıza yetişir.


[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int MessageBox(int hWnd, String text, String caption, uint type);


yukarıdaki kod örneği user32.dll içindeki MessageBox fonksiyonunu managed kodumuzda (örnekte C#) kullanabilmemizi sağlar.

Kullanımı:

MessageBox(0, "heey, bilişim kulübü, ben user32.dll içinden geliyorum",
"Yabancı ama tanıdık bi yüz", 0);


Aşağıdaki kod da VB.NET örneği

Declare Auto Function MessageBox Lib "user32.dll" (ByVal hWnd As Integer, ByVal txt As String, _
ByVal caption As String, ByVal Typ As Integer) As Integer



Kaynak: bilisim-kulubu.com

Managed ve UnManaged KOD ne demektir?

Managed kod demek hafıza yönetimi(memeory management) yonetilen demek oluyor.Oluşturduğun değişkenlerin yok edilmesi işini kullandığın sistem(FrameWork, Programlama dili...) yapıyor demektir.

Örneğin:
SqlCommand cmd = new SqlCommand();
..
...
....
cmd.Dispose(); //işin bitti uçur bellekten..


Bunu kendin yaptın.Ama sen eğer x kadar süre kullanmazsan Çöp Toplayıcı(Garbage Collector) bunu senin yerine yapacaktı. Bunu senin yerine yapan bir sistemde yazılan kod MANAGED CODE(yönetilen kod) demektir.


UNMANAGED KOD(Yönetilmeyen Kod) ise tam tersidir.Yani bellek yonetimi senin tarafından yapılan, başkası tarafindan yonetilmeyen demek oluyor. Yukarıdaki örneğe göre, cmd.Dispose() işini daima senin yapman gereken kodlama.

Örneklemek gerekirse VC++ 6 programı unmanaged koddur. Çunku onda memory yonetimi (Allocation ve Deallocation lar objeleri delete le silme falan) kodcu tarafından yapılır.

Ancak .NET'te ve Java'daGC (Garbage collector - Çöp toplayıcı) vardır.

Garbage collector Nedir? Nedir bu GC ?
GC .NET te hafıza işlerini yoneten mekanizmadır ve Java bu işin öncüsüdür. Yani programının bellekt yonetimi onun tarafından yapılır. Bir obje yarattığında (new le) onun için bellekte bir alan açmak daha sonra bu obje ile işin bittiğinde ona artık herahangi bir referans kalmadığında onun Dispose edilmesi ve Finalize edilmesi gibi işlemleri yapar. Memoryde alan sıkıntısı olduğunda çalışıp yok edebileceği objeleri kaldırır. Bu nedenle her nesne için önce alloc sonrada işin bittiğinde delete demek zorunda kalmazsın.