Member | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar member

C# Uygulamalarında XML Dokümantasyonu Kullanmak

18 February 2010 1 yorum

C# ile Uygulama Geliştirirken Yorum Satırlarını Kullanmak yazımda başladığım konuya XML Dokümantasyonunu eklemem gerekir.

Geleneksel C-tarzı yorum satırlarına ilave olarak C# geliştirilen kodların Xml Dokümantasyonunu otomatik olarak çıkartabilmek için, güçlü yorum operatörlerine sahiptir.

Bu yorum operatörleri (///) ile başlayan satırlara yazılır.

Aşağıdaki listedeki operatörler, derleyici (compiler) tarafından tanınır ve desteklenir;

<c> Tek satırı C# kodu olarak işaretler. Örneğin: <c>string AdSoyad = “Engin Polat”;</c>
<code> Birden çok satırı C# kodu olarak işaretler.
<example> İlgili satırları “örnek kod” olarak işaretler.
<exception> Exception sınıfını dokümante eder. (Derleyici(compiler) tarafından kontrol edilir)
<include> Başka bir dokümantasyon dosyasından yorum ekler. (Derleyici(compiler) tarafından kontrol edilir)
<list> Dokümantasyona liste ekler.
<param> Method parametresini dokümante eder. (Derleyici(compiler) tarafından kontrol edilir)
<paramref> Kelimenin parametre olduğunu işaretler. (Derleyici(compiler) tarafından kontrol edilir)
<permission> Öğeye erişim belirleyicisini dokümante eder. (Derleyici(compiler) tarafından kontrol edilir)
<remarks> Öğeye açıklama ekler.
<returns> Method’un dönüş tipini dokümante eder.
<see> Başka bir parametreye çapraz-referans ekler. (Derleyici(compiler) tarafından kontrol edilir)
<seealso> Açıklamaya “buna da bakın” parçası ekler. (Derleyici(compiler) tarafından kontrol edilir)
<summary> Öğenin kısa açıklamasını dokümante eder.
<value> Özelliği (property) tanımlar.

Örnek olması açısından, aşağıdaki Matematik sınıfını dokümantasyonu ile birlikte yazıyorum;

//Matematik.cs
namespace Engin.Polat
{
	///<summary>
	///  Engin.Polat.Matematik sınıfı.
	///  İki rakamın toplanmasına yaran
	///  Topla method'unu içerir.
	///</summary>
	public class Matematik
	{
		///<summary>
		///  İki rakamın toplanmasını sağlar.
		///</summary>
		///<example>Örnek olarak: Topla(3, 5);</example>
		///<returns>Toplama işleminin sonucu (int)</returns>
		///<param name="x">Toplama işleminin ilk rakamı</param>
		///<param name="y">Toplama işleminin ikinci rakamı</param>
		public int Topla(int x, int y)
		{
			return x + y;
		}
	}
}

Derleme sonucu oluşan Xml dokümanı aşağıdaki gibidir;

<?xml version="1.0"?>
<doc>
	<assembly>
		<name>ConsoleApplication4</name>
	</assembly>
	<members>
		<member name="T:Engin.Polat.Matematik">
			<summary>
				Engin.Polat.Matematik sınıfı.
				İki rakamın toplanmasına yaran
				Topla method'unu içerir.
			</summary>
		</member>
		<member name="M:Engin.Polat.Matematik.Topla(System.Int32,System.Int32)">
			<summary>
				İki rakamın toplanmasını sağlar.
			</summary>
			<example>Örnek olarak: Topla(3, 5);</example>
			<returns>Toplama işleminin sonucu (int)</returns>
			<param name="z">Toplama işleminin ilk rakamı</param>
			<param name="y">Toplama işleminin ikinci rakamı</param>
		</member>
	</members>
</doc>

Dikkat ederseniz, derleyici (compiler) bizim için ve elementlerini eklemiştir. Her element’i name özelliğine sahiptir ve değer olarak öğenin tam adını içerir.

Değerin ilk harfi özel bir anlam taşır;

T : Type
F : Field
M : Member

C# Erişim Belirleyiciler – Access Modifiers

20 January 2010 7 yorum

Öncelikle erişim belirleyicilerin (access modifiers) nerelere uygulandığını bilmemiz lazım; C# projesinde tanımlanmış tüm varlıklara uygulanabilir, buna class, struct, function, method, property ve class seviyesindeki tüm değişkenler dahildir.

Peki, neden erişim belirleyicilere ihtiyaç duyarız?

Çünkü, uygulamamızda kullandığımız varlıkların bulundukları kod bloğunun dışından erişilip/erişilemeyeceğini belirlemek isteriz.

C# dilinde tanımlı erişim belirleyiciler (access modifiers);

public : public olarak tanımlanan öğe, kod bloğunun içinde ve dışında tamamen erişilebilirdir. Yani, hiçbir kısıtlama yoktur.

protected : protected olarak tanımlanan öğe, sadece tanımlandığı class’ın içinde ve o class’tan türetilmiş diğer class’ların içinde erişilebilirdir.

internal : internal olarak tanımlanan öğe, bulunduğu assembly’nin (Dll veya Exe dosyası) içinde erişilebilirdir. Dll veya Exe dosyasının içerisinde erişim için kısıtlama yoktur, ama dışarıdan erişilemez.

protected internal : protected internal erişim belirleyicisi, protected ve internal erişim belirleyicilerinin VEYA (OR) işlemiyle birleştirilmiş halidir. protected internal olarak tanımlanmış öğe, tanımlandığı class’ın içinde ve o class’tan türetilmiş diğer class’ların içinde erişilebilir. Ayrıca, aynı assembly içinde olmasalar dahi, tanımlandığı class’tan türetilmiş diğer class’ların içinde de erişilebilirdir.

private : private olarak tanımlanan öğe, sadece tanımlandığı class’ın içerisinde erişilebilirdir. En katı erişim belirleyicidir.

Aslında CLR içinde tanımlı bir erişim belirleyici daha vardır. FamilyAndAssembly olarak bilinir. C# kelimeleri ile benzetmeye çalışırsak, protected VE (AND) internal erişim belirleyicisidir. C# dili bu erişim belirleyicisini desteklemez, eğer kullanmanız gerekiyorsa, C++ ve direk IL yazmanız gerekmektedir.

class veya struct‘lar ya public, ya da internal olabilir, varsayılan olarak internal erişim belirleyicisine sahiptirler.

Varsayılan olarak class içerisinde tanımlı öğeler private erişim belirleyicisine sahiptirler.

struct içerisinde tanımlı öğeler public, internal veya private olabilirler. struct‘lar türetmeyi desteklemediği için protected ve protected internal erişim belirleyicisine zaten ihtiyaçları yoktur.