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

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.