AAA Logo 2010 v3.1 Full

AAA Logo tasarım yapma aracı full



LİNKLER YENİLENECEK

C++ Rastgele Sayı Dizisi ve Araya Sokma ile Sıralama


10 elemanlı bir dizimiz olsun. Bu diziye rastgele üretilen sayilar atansın. Sonra bu diziyi sıralama algoritmalarından araya sokma sıralaması ile sıralayalım.


#include <iostream>
using namespace std;
int arayasokma(int A[], int sayi)
{
    int i,k,ekle;
    for (i=1;i<sayi;i++)
    {
        ekle=A[i];
        for (k=i-1;k>=0 && ekle<=A[k];k--)
        {
            A[k+1]=A[k];
        }
        A[k+1]=ekle;
    }
}
int main ()
{
    srand(time(NULL)); //kodlar her calistiginde ayni sayilari uretmemesi icin. bilgisayarın o anki saatini baz aliyor.
    int dizi[10];
    int i;
    int n=sizeof(dizi)/sizeof(int); // dizi degiskeninin eleman sayisi
    for (i=0;i<n;i++)
    {
        dizi[i] = rand()%100; // 0 ile 100 arasinda sayi uret
    }
    cout<<"uretilen dizi elemanlari: ";
    for (i=0;i<n;i++)
    {
        cout<<dizi[i]<<" ";
    }
    arayasokma(dizi,n);
    cout<<endl;
    cout<<"araya sokma siralamasi: ";
    for (i=0;i<n;i++)
    {
        cout<<dizi[i]<<" ";
    }
    return 0;
}

C# ArrayList İşlemleri



Tanımlama

ArrayList tanımlama şekli: dizi adımız elemanlar olsun.
ArrayList elemanlar = new ArrayList();
Değer Atama
Örneğin textBox1 den aldığımız veriyi elemanlar dizisine aktarma şu şekilde:
elemanlar.Add(textBox1.Text);
Sıralama
Aldığımız bu veriyi listBox1 listesine şu şekilde aktarabilir.
foreach (string item in elemanlar)
{
listBox1.Items.Add(item);
}

C# listbox'ta arama işlemi

using System;
using System.Windows.Forms;
namespace listbox_arama
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int i;
Boolean bulundu= false;
private void btnAktar_Click(object sender, EventArgs e)/*btnAktar a tıklandığında gerçekleşecek*/
{
for (i = 0; i <= 100; i++)
listBox1.Items.Add(i);
}
private void btnArama_Click(object sender, EventArgs e)
{
for(i = 1;i<=listBox1.Items.Count - 1;i++)
{
if (txtaranan.Text == listBox1.Items[i].ToString())
{
bulundu = true;/*txtaranan.Text ile listBox1 içindeki döngüden bir değer eşleştiğinde bulundu değişkeni true dönüşecek*/
listBox1.SelectedIndex = Int32.Parse(listBox1.Items[i].ToString());/*bulunan değer seçili hale getiriliyor*/
break;
}
else bulundu = false;/*eşleşme olmassa false durumu devem edecek*/
}
if (bulundu == true) {
MessageBox.Show("Bulundu");
}
else {
MessageBox.Show("Bulunamadı");
}
}
}
}

C# iç içe struct oluşturma Örneği

Bir iç içe örnek struct yapısı.

public struct siparis
{
public int siparisNo;
public DateTime siparisVermeTarihi;
public DateTime siparisTeslimTarihi;
public struct musteri
{
public string adi;
public string soyadi;
public double tcNo;
public string email;
public struct adres
{
public string sehir;
public string ilce;
public string addres;
}
}
public struct urun
{
public string urunAdi;
public int urunKodu;
public double urunFiyati;
}
}

Ofis 2010'a genel bir bakış Türkçe Pdf

blogsahin.blogspot.comHayrettin Üçüncü imzalı 222 sayfalık bir e-kitap.
Kitap;
MICROSOFT OFFICE 2010 ORTAK ÖZELLİKLERE GENEL BAKIŞ
MICROSOFT WORD 2010
MICROSOFT POWERPOİNT 2010
MICROSOFT EXCEL 2010
MICROSOFT OUTLOOK 2010
MICROSOFT ONENOTE 2010

başlıklarında oluşuyor.

LİNKLER YENİLENECEK

C# dynamic vs object farki

object --> Genel veri tipi. Tip dönüşümlerinde oluşan hatalar derleme esnasında gözardı edilerek çalışma zamanında hata üretilir.
dynamic --> Genel veri tipi. Tip dönüşümlerinde oluşan hatalar derleme esnasında herhangi bir kontrol yapılmadığı için hata üretilmez.

Not: dynamic veri türü C# 4.0' a ait bir veri türü olduğundan dolayı dynamic veri türünü kullanacağımız projelerde Framework 4.0 versiyonunu seçmelisiniz.

C# ile domain whois sorgulama

c sharp
kodaman.org'da gördüğüm C# ile domain whois sorgusu yapmayı paylaşmak istiyorum.
Uygulama "whois.internic.com" üzerinden sorgulama yapıyor ve uygulamanin kodlarinin çalişabilmesi için ek olarak aşağıdaki namespace'lerin eklenmesi gerekmekte.

using System.Net.Sockets;
using System.IO;

Formumuza bir adet buton bir adet textbox ve gelen veriyi göstermek için richtextbox(veya label) ekliyoruz.

Wampserver kurmak ve port bağlantı sorunu

Bilgisayaramıza yerel bir ağ oluşturmak istiyoruz. Bunun için Apache, MySql, PHP'nin ayrı ayrı kurmamız gerekir fakat bunları ayrı ayrı kurmak zahmetlidir ve aynı zamanda birtakım ayarlar gerektirmektedir. Wampserver ise bu işlemleri tek başına yapmaktadır. Wamp; Windows, apache, mysql, ve php nin baş harfleriyle oluşturulmuştur.

Bilgisayarlar Belleği nasıl düzenler?

Bellek Nedir? Bilgisayarda çesitli programlarin çalistirildigi , geçici veya kalici bilgilerin bulunacagi hafiza alanlaridir.

Bilgisayarlar, uygulanan programları ve bu programların kullandığı veriyi tutar. Değer ve başvuru türleri arasındaki farkları anlamak için, bellekte verinin nasıl düzenlendiğini anlamak yararlı olacaktır.
İşletim sistemleri ve çalışma zamanları sık sık veriyi tutmak için kullanlan belleği her biri ayrı olarak yönetilen iki büyük parçaya ayırır. Belleğin iki küçük parçasına yığın(stack) ve öbek(heap) adı verilir. Yığın ve öbek çok farklı amaçlara hizmet eder.

Csharp konsol 2. dereceden denklemin kökleri örnek

Bu örnek basit bir uygulama olmasına karşın do-while döngüsünü, klavyeden değer alma, tip dönüştürme, if-else karşılaştırmasını, string uygulamasını bir arada görebilirsiniz.

object bir genel veri tipi midir? [18]

object tüm diğer tiplerin temel sınıfı olduğu ve kutulama/kutudan çıkarma işlemleri değer tipleri için otomatik olarak işlendiği için, object'i genel bir veri tipi olarak kullanmak mümkündür. Örnek olarak, bir object dizisi oluşturan ve çeşitli diğer tiplerden verileri bu dizinin elemanlarına atayan aşağıdaki programı inceleyelim:

Kutulama ve Kutudan Çıkarma [17]

Daha önce de açıkladığımız gibi, değer tipleri de dahil olmak üzere tüm C# tipleri object'ten türetilirler. Bu nedenle, object tipine yapılan bir referans, değer tipleri de dahil olmak üzere tüm tiplere referansta bulunmak üzere kullanılabilir. Bir object referansı bir değer tipine referansta bulunduğunda kutulama(boxing) denilen bir süreç işler. Kutulama, bir değer tipinin değerinin bir nesne örneğinde depolanmasına neden olur. Dolayısıyla, bir değer tipi bir nesnenin içine "kutulanır". Bu nesne, diğer herhangi bir nesne gibi kullanılabilir. Kutulama her zaman
otomatik olarak yapılır. Sizin tek yapmanız gereken bir object referansına bir değer atamaktır. Gerisini C# halleder.

C# object [16]

C# 'ta object olarak adlandırılan özel bir sınıf tanımlıdır. object, tüm diğer sınıflar ve tüm diğer tipler (değer tipleri de dahil olmak üzere) için kapalı bir temel sınıf görevi görür. Bir başkadeyişle, tüm diğer tipler object'ten türetilir. Bu, object tipindeki bir referans değişkenin diğer herhangi tipteki bir nesneye referansta bulunabilmesi anlamına gelir. Ayrıca, diziler de sınıf olarak gerçeklendikleri için, object tipindeki bir değişken herhangi bir diziye de referansta bulunabilir. Teknik olarak, C#'taki object ismi aslında .NET Framework sınıf kütüphanesinin bir parçası olan System.Object için verilen bir başka isimdir. object sınıfı aşağıdaki tabloda gösterilen metotları tanımlar. Yani, bu metotlar her nesne için kullanıma hazırdır.
Bu metotlardan bazıları biraz daha açıklamak gerekli. Equals(object) metodu, kendisini çağıran nesnenin, ona aktarılan argümanla aynı nesneye referansta bulunup bulunmadığını saptar. (Bir başka ifade ile, iki referansın aynı olup olmadığını kontrol eder.) Bu metodu kendi oluşturduğunuz sınıflarda devre dışı bırakabilirsiniz. Bu sayede, "eşitliğin" bir sınıfta ne anlama geldiğini kendinize göre tanımlama olanağı bulursunuz.
Örneğin, Equals(object, object) metodu, sonucu hesaplamak için Equals(object)'i kullanır.

C#'da Operatörler

C# .NET dilinde aritmetiksel, aktarma, mantıksal, karşılaştırma, birleştirme operatörleri olarak beş çeşit operatör kullanılmaktadır.

ARİTMETİK OPERATÖRLER
------------------------------------

Kalıtımı önlemek için sealed kullanmak [15]

csharp blogsahin
Kalıtım her ne kadar güçlü ve kullanışlı olsa da kimi zaman bunu önlemek isteyeceksiniz. Örneğin, özelleştirilmiş bir donanım aygıtının, söz gelişi bir tıbbi monitörün ilk kullanıma hazırlanması ile ilgili adımları bir araya getiren bir sınıfınız olabilir. Böyle bir durumda, sınıfınızı kullanan kullanızıların monitörün ilk kullanıma hazırlanma şeklini değiştirebilmelerini istemezsiniz. Bu, aygıtın büyük olasılıkla hatalı olarak hazırlanmasına neden lacaktr. Sebep ne olursa olsub C#'ta sealed anahtar kelimesi kullanılarak bir sınıfın kalıtım yoluyla aktarılması kolaylıkla önlenebilir.

Özet Sınıfların Kullanımı - abstract [14]

Bazen, şöyle bir temel sınıf oluşturmak istersiniz: O sınıf sadece kendisinden türetilmiş sınıfların genelleştirilmiş bir şekli olmalı, detaylar her bir türetilmiş sınıf tarafından doldurulmalıdır. Bu tür bi sınıf, türetilmiş sınıfların uygulamaları gereken metotların özünü belirler, fakat bu metotlardan biri ya da daha fazlasi için kendisi bir uygulama sağlamaz. Temel sınıf, anlamlı bir metot uygulaması oluşturamadığı zaman böyle bir durumla karşılaşılabilir. TwoDShape'in yukarıdaki örnekte(konu [13]) kullanılan versiyonunda bu tür bir durum söz konusudur. area()'nın tanımı yalnızca bir yer belirteci olmaktan ibarettir. area(), hiçbir nesne tipinin alanını hesaplayıp, ekranda göstermez.

Kendi sınıf kütüphanelerinizi oluşturdukça göreceksiniz ki, bir metodun kendi temel sınıfı kapsamında anlamlı bir tanımının olmaması yaygın bir kullanım değildir. Bu durumu iki şekilde kontrol altına alınabilir. Birincisi, önceki örnekte gösterildiği gibi metodun bir uyarı mesajı vermesi yeterlidir. Bu yöntem belirli durumlarda -örneğin hata ayıklama sırasında- yararlı olsa da bu yöntemi uygulamak genellikle uygun değildir. Türetilmiş sınıfın bir anlam taşıması için türetilmiş sınıf tarafından devre dışı bırakılması gereken metotlara sahip olabilirsiniz. Triangle sınıfını ele aldğımız zaman area() tanımlanmazsa bu sınıfın bir anlamı kalmaz. Bu durumda, türetilmiş sınıfın gerçekten gerekli metotların tümünü devre dışı bırakmasını garanti edecek bir çözüme ihtiyacınız olur. Bu probleme C#'ın getirdiği çözüm özet metot kullanımıdır.

Sanal Metotları Uygulamak [13]

Sanal metotların gücünü daha iyi kavramak için bu metotları TwoDShape sınıfına uygulayacağız. önceki örneklerde, TwoDShape'ten türetilen her sınıf, area() adında bir metot tanımlamaktaydı. Bu kullanım bize bir fikir verir: area()'yı TwoDShape sınıfının bir sanal metodu yapmak çok daha iyi olabilir. Bu sayede, türetilmiş sınıfların her biri area()'yı devre dışı bırakabilir ve sınıf içinde belirtilen şeklin alanının nasıl hesaplandığını da tanımlayabilir. Aşağıdaki program bunu gerçekleştirir. Kolaylık sağlamak için TwoDShape'e ayrıca bir de isim özelliği eklenmektedir. (Bu, sınıfları göstermeyi kolaylaştırır.)

Devre dışı bırakılan metotlara neden gerek var? [12]

Devre dışı bırakılan metotlar, C#'ın çalışma zamanında gerekli olan çok biçimliliği desteklemesine olanak tanır. Çok biçimlilik nesne yönelimli programlama için gereklidir, çünkü çok biçimlilik bir yandan bir genel sınıfın tüm türevlerinde ortak olacak metotları belirtmeye olanak tanırken, öte yandan türetilmiş sınıflara da bu metotların bir kısmının ya da tümünün spesifik uygulamalarını tanımlamalarına imkan verir. Devre dışı bırakılan metotlar, C#'ın "tek arayüz, çok metot" çok biçimlilik özelliğini uygulamanın bir başka yoludur.
Çok biçimliliği başarıyla uygulamanın anahtarı bir ölçüde, temel ve türetilmiş sınıfların hiyerarşi içinde daha az uzmanlık alanından daha yoğun uzmanlık alanına doğru ilerlediğini kavramaktır. Doğru kullanıldığında bir temel sınıf, türetilmiş sınıfın direkt olarak kullanabileceği öğelerin tümünü sağlar. Ayrıca, türetilmiş sınıfın kendi başına uygulaması gereken metotları da tanımlar. Bu, türetilmiş sınıfa kendi metotlarını tanımlama esnekliği sunarken, aynı zamanda tutarlı bir arayüzü de mecbur kılmayı sürdürür. Böylece, kalıtımı devre dışı bırakılan metotlarla birleştirerek bir temel sınıf, tüm türetilmiş sınıfları tarafından kullanılacak olan metotların genel yapısını tanımlayabilir.

Kaynak: Herbert Schildt
Herkes için C#

Sanal Metotlar ve Devre Dışı Bırakma (Overriding) [11]

Sanal metot, temel sınıf içerisinde virtual olarak deklare edilen ve bir veya daha fazla türetilmiş sınıf içinde yeniden tanımlanan bir metotdur. Böylece, her türetilmiş sınıf bir sanal metodun kendine özgü bir versiyonuna sahip olabilir. Sanal metotlardan biri bir temel referansı tarafından çağrıldığında ortaya çıkan durum ilginçtir. Bu durumda, referans tarafından referansta bulunulan nesnenin tipine bağlı olarak c#, söz konusu metodun hangi versiyonunun çağrılacağını belirler ve bu belirleme çalışma zamanında gerçekleştirilir.
Yani, farklı nesnelere referansta bulunuluyorsa sanal metodun farklı versiyonları çalıştırılır. Bir başka deyişle, sanal metodun hangi versiyonunun çalıştırılacağını belirleyen referansta bulunan nesnenin tipidir. (referansın tipi değildir.) Dolayısıyla, eğer bir temel sınıf bir sanal metot içeriyorsa ve bu temel sınıftan başka sınıflar turetilmişse, bu durumda bir temel sınıf referansı aracılığıyla farklı nesne tiplerine referansta bulunulurken sanal metodun farklı versiyonları çalıştırılır.

Temel Sınıf Referansları ve Türetilmiş Nesneler [10]

Bildiğiniz gibi, C# veri tiplerine sıkı sıkıya bağlı bir dildir. Standart dönüşümler ve basit tiplere uygulanan otomatik terfiler bir yana, tip uyumluluğu kesinlikle zorlanır. Bu yüzden, bir sınıf tipindeki bir referans değişkeni normalde bir başka sınıf tipindeki nesneye referans bulunamaz. Örneğin, aşağıdaki programı ele alın:

// Bu program calismayacaktir.
class X {
int a;
public X(int i){ a=i; }
}
class Y {
int a;
public Y(int i) { a=i; }
}

class IncompatibleRef {
public static void Main() {
X x=new X(10);
X x2;
Y y=new Y(5);

x2=x; // OK, her ikiside ayni tipte
x2=y; // Hata, ayni tipte degiller
}
}

Yapılandırıcılar ne zaman çağrılır? [9]

Daha önceki bölümlerde kalıtım ve sınıf hiyerarşileri ele alınırken önemli bir soru aklınıza takılmış olabilir: Türetilmiş bir sınıf oluşturulunca önce kimin yapılandırıcısı çalıştırılır; türetilmiş sınıfın yapılandırıcısı mı, yoksa temel sınıf tarafından tanımlanan yapılandırıcı mı? Örneğin, B adında bir türetilmiş sınıf ve A adında bir temel sınıf verildiğini varsayalım. A'nın yapılandırıcısı B'ninkinden önce mi çağrılır, yoksa sonra mı? Bu sorunun yanıtı şudur: Bir sınıf hiyerarşisinde yapılandırıcılar, temel sınıftan türetilmiş sınıfa doğru türetilme sırasına göre çağrılırlar. Üstelik, base kullanılsın ya da kullanılmasın bu sıra aynıdır. Eğer base kullanılmazsa, temel sınıfların her birinin varsayılan (parametresiz) yapılandırıcısı çalıştırılacaktır. Aşağıdaki program yapılandırıcıların çalıştırılma sırasını göstermektedir.

Çok Katmanlı Hiyerarşi Oluşturmak [8]

Şu ana dek, yalnızca bir temel sınıf ve türetilmiş sınıftan oluşan basit sınıf hiyerarşisini kullanmaktayız. Ancak, istediğiniz kadar çok sayıda kalıtım katmanı içeren hiyerarşiler inşa edebilirsiniz. Önceden de bahsedeildiği gibi, bir türetilmiş sınıfı bir başkasının temel sınıfı olarak kullanmak tamamen geçerlidir. Örneğin A,B ve C adında üç sınıfın verildiği varsayılarak C, B'den; B'de A'dan türerilebilir. Bu tür bir durum söz konusu olduğunda, türetilmiş sınıfların her biri kendi temel sınıflarının tümünde yer alan özelliklerin tümünü kalıtım yoluyla elde eder.
Bu örnekte C, B ve A'nın tüm özelliklerini kalıtım yoluyla sahip olur. Çok katmanlı hiyerarşinin nasıl kullanışlı olabileceğini anlamak için aşağıdaki programıele alın. Bu programda Triangle adındaki türetilmiş sınıf, ColorTriangle adında türetilmiş sınıfı oluşturmak için temel sınıf olarak kullanılmaktadır. ColorTriangle, Triangle ve TwoDShape'in tüm özelliklerini kalıtım yoluyla elde ettiği gibi, üçgenin rengini tutan color adında bir de alan eklemektedir.

Gizli bir isme erişmek için base kullanımı [7]

base'in biraz this gibi davranan ikinci bir şekli de vardır. Bunun this'ten tek farkı, bunun her zaman kendisinin kullanılmakta olduğu türerilmiş sınıfın türediği temel sınıfına referansta bulunmasıdır. Bu kullanımının genel yapısı şu şekildedir:

base.üye

Burada üye, bir metot yada bir örnek değişken olabilir. base'in bu tür kullanımı bir türetilmiş sınıf içindeki aynı isimli üyeyi gizlediği durumlar için çok uygundur. Bir önceki başlıktaki örnekteki sınıf hiyerarşisinin şu versiyonunu ele alalım.

Kalıtım ve İsim Gizleme [6]

Bir türetilmiş sınıfın temel sınıftaki bir üye ile aynı ismi taşıyan bir üye tanımlaması mümkündür. Böyle bir durum söz konusu olunca temel sınıfın üyesi türetilmiş sınıf içindeki gizlenmiş olur. Bu, C#'ta teknik olarak bir hata olmasa da derleyici bir uyarı mesajı verecektir. Bu uyarı, bir ismin gizlenmekte olduğu gerçeğine işaret edecektir. Eğer niyetiniz temel sınıf üyesini gizlemek ise, bu durumda bu uyarıyı önlemek için türerilmiş sınıf üyesinin öncesinde new anahtar kelimesini kullanmalısınız. new'un bu kullanımının bir nesne örneği oluştururkenki kullanımından tamamen ayrı ve de farklıolduğunu kavrayın.

Temel Sınıfın Yapılandırıcılarını Çağırmak 2 [5]

Temel sınıf tarafından tanımlanan herhangi bir yapılandırıcı base tarafından çağrılabilir. Çalıştırılacak olan yapılandırıcı, argümanları eşleyen yapılandırıcı olacaktır. Örneğin, işte size TwoDShape ve Triangle'in genişletilmiş versiyonu. Aşağıdaki örnekte TwoDShape ve Triangle, hem varsayılan hem de tek atgümanlı yapılandırıcı içerirler.

Temel Sınıfın Yapılandırıcılarını Çağırmak 1 [5]

Türetilmiş bir sınıf kendi temel sınıfı içinde tanımlanmış bir yapılandırıcıyı çağırabilir. Bunun
için, türetilmiş sınıfın yapılandırıcı deklarasyonunun genişletilmiş bir şekli base anahtar kelimesi kullanılmalıdır. Bu genişletilmiş deklarasyonun genel yapısı aşağıdaki gibidir:

türetilmiş yapılandırıcı (parametre-listesi) : base(arg-listesi) {
// yapılandırıcının gövdesi
}

Burada arg-listesi, temel sınıf içindeki yapılandırıcı tarafından ihtiyaç duyulan herhangi bir argümanı belirtmektedir.
Base'in kullanımı aşağıdaki örnekte ele alın. TwoDShape'de bu kez widrh ve height özelliklerine ilk değer atayan bir yapılandırıcı tanımlanmaktadır.

Yapılandırıcılar ve Kalıtım [4]

Bir hiyararşi içinde, hem temel sınıfların hem de türetilmiş sınıfların kendi yapılandırıcılarına sahip olmaları mümkündür. Bu ortaya önemli bir soru atar: Türerilmiş bir sınıfın bir nesnesini yapılandırmaktan hangi yapılandırıcı sorumludur? Temel sınıf içindeki mi, türetilmiş sınıf içindeki mi, yoksa her ikisi de mi?
Yanıt: Nesnenin temel sınıfa ait parçaları temel sınıfın yapılandırıcı tarafından, türetilmiş sınıfa ait parçaları türetilmiş sınıfın yapılandırıcısı tarafından yapılandırılır. Çünkü temel sınıfın, türetilmiş sınıf içindeki öğeler ve öğelere erişim hakkında bilgisi yoktur. Bu nedenle, her iki sınıfın yapılandırıcıları ayrı olmalıdır. Önceki örnekler C# tarafından otomatik olarak oluşturulan varsayılan yapılandırıcılara dayanıyordu. Ancak, pratikte birçok sınıfın yapılandırıcısı vardır. Burada, bu durumun nasıl kontrol altına alındığını göreceksiniz.

protected Erişimi Kullanımı [3]

Diğer bölümde açıklandığı gibi, bir temel sınıfın bir private üyesi bir türetilmiş sınıf tarafından
erişilemez. Yani bir türetilmiş sınıfın temel sınıfın içindeki bazı üyelere erişebilmesini istiyorsanız,
türetilmiş sınıfın public olması gerekir.
Fakat şöyle bir durum daha vardır: C# size bir korumalı üye oluşturmanıza olanak tanır. Bir korumalı üye, sınıf hiyerarşisi içinde public'tir ama hiyerarji dışında privatedir. Korumalı üye protected erişim niteleyicisi kullanılarak oluşturulur. Bir sınıfın bir üyesi protected olarak deklare edilirse, söz konusu üye privatedir(önemli bir istisna haricinde). protected üye kalıtım yoluyla aktarıldığı zaman, istisnai durum ortaya çıkar. Bu durumda, temel sınıfın protected üyesi türetilmiş sınıfın protected üyesi halini alır ve böylece türetilmiş sınıf tarafından erişilebilir. Böylece protected niteleyicisini kullanarak, kendi sınıflarında private olan fakat yine de kalıtım yoluyla aktarılabilen ve bir türetilmiş sınıf tarafından erişilebilen sınıf üyeleri oluşturabilirsiniz.
Aşağıda, protected niteleyici kullanan basit bir örnek görüyorsunuz.

//protected'i tanitir.

using System;
class B {
protected int i,j; // B'de private, fakat D tarafından erisilebilir.
public void set(int a, int b) {
i = a;
j = b;
}

public void show() {
Console.WriteLine(i + " " + j);
}
}

class D : B {
int k; // private
//D, B'nin i ve j üyelerine erişebilir
public void setk() {
k = i * j;
}
public void showk() {
Console.WriteLine(k);
}
}

class ProtectedDemo {
public static void Main() {
D ob = new D();

ob.set(7, 9); // OK, D tarafından bilinir
ob.show(); // OK, D tarafından bilinir

ob.setk(); // OK, D'nin bir parçası
ob.showk(); // OK, D'nin bir parçası
}
}

Bu örnekte B, kalıtım yoluyla D'ye aktarıldığı için ve B'nin içinde i ve j protected olarak deklare edildikleri için, setk() metodu bunlara erişemez. Eğer i ve j, B tarafından private olarak tanımlanmış olsalardı D'nin bunlara erişimi olmayacaktı ve program derlenmeyecekti.
Tıpkı public ve private gibi, hangi sasayıda kalıtım katmanı dahil edilmiş olursa olsun protected statüsü üye ile birlikte kalır. Bu yüzden, bir türetilmiş sınıf bir başka türetilmiş sınıf için temel sınıf olarak kullanılırken, ilk türetilmiş sınıf tarafından kalıtım yoluyla elde edilen ilk temel sınıfın herhangi bir protected üyesi, ikinci türetilmiş sınıfa da aynen protected olarak kalıtım yoluyla aktarılır.

Kaynak: Herberth Schildt
Herkes İçin C#


Üye Erişimi ve Kalıtım [2]

Üye Erişim ve Kalıtım
-----------------------------------------------------------
Sınıf Üyelerinin izinsiz kullanımlarını veya gereksiz yere kurcalanmalarını önlemek için sınıf
üyeleri genellikle private olarak deklare edilir. Bir sınıfı kalıtım yoluyla aktarmak, bu private
erişim kısıtlamasını çiğnemez. Böylece, bir türetilmiş sınıf kendi temel sınıfının tüm üyelerini
içerse dahi, temel sınıfın private olarak deklare edilmiş üyelerine erişemez.
Örneğin; eğer width ve height, TwoDShape içinde, aşağıda gösterildiği gibi, private olarak
deklare edilseydi, Triangle'ın bunlara erişmesi mümkün olmayacaktı:

// private uyeler kalıtım yoluyla aktarılamaz
// Bu ornek derlenmyecektir.
using System;
//Ikı boyutlu nesneler için bir sınıf.
class TwoDShape {
double width; // artık ozel
double height; // artik ozel
public void showDim(){
Console.WriteLine("width and height are " + width + " and " + height);
}
}
// Triangle, TwoDShape2ten turetilir.
class Triangle : TwoDShape {
public string style; // ucgenin sekli
// Ucgenin alanini dondur.
public double area() {
return width * height / 2; // Hata, private üyeye erisemez.
}
// Ucgenin seklini goster.
public void showStyle() {
Console.WriteLine("Triangle is " + style);
}
}

Triangle sınıfı derslenmeyecektir, çünkü area() metodu içindeki width ve height'a
yönelik referanslar erişimin çiğnenmesine neden olur. width ve height şimdi private oldukları için
artık yanlızca kendi sınıflarının diğer üyeleri tarafından erişilirler. Türetilmiş sınıflar bunlara
erişim hakkına sahip değildir. İlk bakışta bunun ciddi bir kısıtlama olduğunu düşünebilirsiniz. Ancak
c# çeşitli çözümler sağlamaktadır. Bunlardan biri, protected (korumalı) üyeler kullanmaktır. protected
üyeler sonraki başlıkta anlatılacaktır. İkinci bir çözüm ise private verilere eişim sağlamak
amacıyla public özellikler ya da metodlar kullanmaktır. Aşağıda TwoDShape sınıflarının width ve
height üyeleri özellik haline getirilerek yeniden yazılmış versiyonunu görmektesiz.

// private uyeleri ayarlamak ve almak icin ozellik kullanir.
using System;
// Iki boyutlu nesneler icin bir sinif
class TwoDShape {
double pri_width; // artik ozel
double pri_height; // artik ozel
// width ve height icin ozellikler
public double width {
get { return pri_height; }
set { pri_height = value; }
}
public double height {
get { return pri_height; }
set { pri_height = value; }
}
public void showDim() {
Console.WriteLine("width and height are " + width + " and " + height);
}
}
// Ucgenler icin TwoDShape'ten turetilmis bir sinif.
class Triangle : TwoDShape {
public string style; // ucgenin sekli
// Ucgenin alanini dondur.
public double area() {
return width*height / 2;
}
//Ucgenin seklini goster.
public void showStyle() {
Console.WriteLine("Triangle is " + style);
}
}

class Shapes2 {
public static void Main() {
Triangle t1 = new Triangle();
Triangle t2 = new Triangle();
t1.width = 4.0;
t1.style = "isosceles";
t2.width = 8.0;
t2.height = 12.0;
t2.style = "right";
Console.WriteLine("Area is " + t1.area());

Console.WriteLine();
Console.WriteLine("Info for t2: ");
t2.showStyle();
t2.showDim();
Console.WriteLine("Area is " + t2.area());
}
}

Temel ve türetilmiş sınıflara referansta bulunurken kimi zaman üst sınıf (superclass)
ve alt sınıf (subclass) terimleri kulanılır. Bu terimler Java programlamasından gelmektedir.
Java da alt sınıf denilen C#'ta türetilmiş sınıf, Java da üst sınıf denilen C#'ta temel sınıf
olarak adlandırılmaktadır.

Kaynak: Herberth Schildt
Herkes İçin C#

C#'da Kalıtım'a Giriş [1]

Kalıtım(inheritance), bir nesnenin diğer bir nesnenin özelliklerini ele geçirebilmesini sağlayan bir yöntemdir. Yani kalıtım kullanarak, birbiriyle bağlantılı bir grup ögenin ortak özelliklerini tanımlayan genel bir sınıf oluşturabilirsiniz. Bu sınıf daha sonra diğer bir sınıfla kalıtım yoluyla aktarılır ve her sınıf kendisine özgü özellikleri buna ekler.
Örneğin küçük beyaz tavşan; "tavşan" sınıflandırılmasının bir parçasıdır. Tavşan, memeliler sınıflandırılmasının bir parçasıdır. Memeliler ise daha büyük bir sınıflandırma olan canlılar sınıfının altında yer alır. Yani, canlılar sınıfı aynı zamanda kendisinin bir alt sınıfı olan memeliler sınıfına da uygulanabilecek belirli özelliklere sahiptir. Bu özelliklere ek olarak, memeliler sınıfının da kendisini diğer sınıflardan ayırt eden, kendisine özgü özellikleri vardır.
Tavşan sınıfı bu tür özelliklerden tavşana özgü olanları tanımlar. Küçük Beyaz tavşan, bu durumda , kendisinden önce gelen tüm sınıfların tüm özelliklerini kalıtım yoluyla devralacak ve bu özelliklerden sadece kendisini eşsiz kılanları tanımlayacaktır.
Temel Sınıf --> Kalıtım yoluyla aktarılan sınıftır.
Türetilmiş Sınıf --> Kalıtım işlemini gerçekleştiren sınıftır.
Türetilmiş sınıf özel sınıfın özelleştirilmiş versiyonudur.
Türetilmiş sınıf temel sınıf tarafından tanımlanan tüm değişken metot , özellik, operatör ve indeksleyicileri kalıtım yoluyla elde eder.

Kalıtım'ın Temel Unsurları
Bir örnekle başlayalım. Aşağıdaki TwoDShape adındaki sınıf, iki boyutlu genel bir şeklin niteliklerini tanımlamaktadır.
şekil kare, dikdörtgen üçgen vs. olabilir.


//iki boyutlu nesneler için bir sınıf
class TwoDShape
{
   public double width;
   public double height;
   public void ShowDim()
   {
       Console.WriteLine("width and height are " + width + " and " + height);
   }
}



TwoDShape, temel sınıf olarak kullanıbilir. Aşağıdaki program Triangle adında bir sınıf türetmek için TwoDShape'i kullanmaktadır. Tanımlanma şekline dikkat edelim.

// Basit bir sınıf hiyerarsisi.
using System;
class TwoDShape
{
public double width;
public double height;
public void ShowDim()
{
Console.WriteLine("width and height are " + width + " and " + height);
}
}
class Triangle : TwoDShape // Triangle, TwoDShape'den turetilir.
{
public string style;
public double area()
{
return width * height / 2; // Ucgenin alanini dondur.
}
public void showStyle()
{
Console.WriteLine("Triangle is " + style); // Ucgenin seklini göster.
}
}
class Shapes
{
public static void Main()
{
Triangle t1 = new Triangle();
Triangle t2 = new Triangle();

t1.width = 4.0;
t1.height = 4.0;
t1.style = "isoscelos";
t2.width = 8.0;
t2.height = 12.0;
t2.style = "right";

Console.WriteLine("Info for t1: ");
t1.showStyle();
t1.ShowDim();
Console.WriteLine("Area is " + t1.area());
Console.WriteLine();
Console.WriteLine("Info for t2: ");
t2.showStyle();
t2.ShowDim();
Console.WriteLine("Area is " + t2.area());
}
}


Siyah ekranda görünen çıktı:

Info for t1:
Triangle is isosceles
width and height are 4 and 4
Area is 8

Info for t2:
Triangle is right
width and height are 8 and 12
Area is 48


Triangle, TwoDShape'in belirli bir tipini oluşturur. Bu tip bir üçgendir. Triangle, TwoDShape'in tümünü
içerir. Ayrıca style alanını, area() ve showStyle() metodlarını da ekler. Üçgenin şekli style içinde
saklanır. area() ucgenin alanını hesaplar ve döndürür, showstyle() ise üçgenin şeklini gösterir. Şu
satıra dikkat edin.

class Triangle : TwoDShape {

TwoDShape'i devralan Triangle


Ayrıca türetilmiş sınıf için temel sınıf niteliğinde olmak temel sınıfın kendi başında kullanılamayacağı anlamı taşımaz. Temel sınıfta tek başına kullanılabilir.
Oluşturulan her türetilmiş sınıf için yanlızca bir adet temel sınıf belirlenebilir.
Ayrıca hiçbir sınıf dolaylı veya dolaysız kendi kendisinin temel sınıfı olamaz.
Kalıtımın başlıca avantajı şudur: Bir grup nesnenin ortak niteliklerini tanımlayan bir temel sınıf, çok daha spesifik olan türetüilmiş sınıflardan istenilen sayıda oluşturmak için kullanılabilir. Türetilmiş sınıfların herbiri kendisini özgü sınıflandırmayı tam olarak biççimlendirebilir.
Örneğin; dikdörtgenleri bir sınıf içine paketleyen ve TwoDShape'ten türetilmiş bir başka sınıf
şu şekildedir.

// Eger dikdörtgense false, kareyse true.
class Rectangle : TwoDShape
{
public bool isSquare()
{
if(width==height)
return true;
return false;
}
//dikdortgenin alanini dondur.
public double area()
{
return width*height;
}
}

Rectangle, TwoDShape'i içerir. Ayrıca dikdörtgenin kare olup olmadığını
belirleyen isSquare() metodunu ve dikdörtgenin alanını hesaplayan area()
metodunu da ekler.

Kaynak: Herberth Schildt
Herkes İçin C#

CSS'de Divlerin Ovalliği

Bu özellik ie ve chrome de çalışmamaktadır.
Ovalliği sağlayan kod -moz-border-radius dur.
-moz-border-radius:deger; şeklinde kullanılır.
Değer genelde px dir.

Dört köşenin hepsinde ovallik sağlamak için
-moz-border-radius:değer;

Örneğin; sadece üst sol köşede ovallik sağlamak için
-moz-border-radius-topleft:değer;

Örneğin; üst sağ ve alt sol köşelerde ovallik sağlamak için
-moz-border-radius-topright:değer;
-moz-border-radius-bottomleft:değer; olarak ikisi birlikte kullanılır.

CSS e Giriş e-kitap PDF

CSS öğrenmek için pdf formatında güzel bir kaynak. CSS hakkında hiçbirşey bilmeyenler için güzel bir başlangıç olur. Bu e-kitap ile css kodlarını öğrenebilirsiniz. Fatih Hayrioğlu imzalı 250 sayfa 6.9 mb boyutunda. Kitap görsel olarakta güzel bir şekilde hazırlanmış.

LİNKLER YENİLENECEK

Php ile web programlama e-kitap [İNDİR]



Fresh catalog ile hazırlanmış.
430 sayfalık Mehmet Şamlı imzalı bir e-kitap


LİNKLER KIRILMIŞ EN KISA ZAMANDA YENİLENECEK