Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kodlama kuralları, bir geliştirme ekibinde kod okunabilirliği, tutarlılık ve işbirliğini korumak için gereklidir. Sektör uygulamalarını ve belirlenmiş yönergeleri izleyen kodu anlamak, korumak ve genişletmek daha kolaydır. Çoğu proje, kod kuralları aracılığıyla tutarlı bir stil uygular.
dotnet/docs ve dotnet/samples projeleri özel durum değildir. Bu makale serisinde kodlama kurallarımızı ve bunları zorunlu kılmak için kullandığımız araçları öğreneceksiniz. Kurallarımızı olduğu gibi alabilir veya ekibinizin gereksinimlerine uyacak şekilde değiştirebilirsiniz.
Kurallarımızı aşağıdaki hedeflere göre seçtik:
- Doğruluk: Örneklerimiz kopyalanır ve uygulamalarınıza yapıştırılır. Bunu bekliyoruz, bu nedenle birden çok düzenlemeden sonra bile dayanıklı ve doğru kodlar yapmamız gerekir.
- Öğretim: Örneklerimizin amacı tüm .NET ve C# derslerini vermektir. Bu nedenle, herhangi bir dil özelliğine veya API'ye kısıtlama eklemeyiz. Bunun yerine, bu örnekler bir özelliğin iyi bir seçim olduğunu öğretir.
- Tutarlılık: Okuyucular içeriğimizde tutarlı bir deneyim bekler. Tüm örnekler aynı stile uygun olmalıdır.
- Benimseme: Örneklerimizi yeni dil özelliklerini kullanacak şekilde hızlı bir şekilde güncelliyoruz. Bu uygulama, yeni özelliklerin farkındalığını artırarak tüm C# geliştiricilerine daha tanıdık olmalarını sağlar.
Önemli
Bu yönergeler Microsoft tarafından örnekler ve belgeler geliştirmek için kullanılır. .NET Çalışma Zamanı, C# Kodlama Stili ve C# derleyicisi (roslyn) yönergelerinden benimsenmiştir. Bu yönergeleri, birkaç yıllık Açık Kaynak geliştirme sürecinde benimsenmelerinden dolayı seçtik. Bu yönergeler, topluluk üyelerinin çalışma zamanı ve derleyici projelerine katılmasına yardımcı olur. Bunlar, yetkili bir liste değil ortak C# kurallarına örnek olarak tasarlanmıştır (ayrıntılı yönergeler için bkz. Çerçeve Tasarım Yönergeleri).
Öğretim ve benimseme hedefleri, docs kodlama kuralının çalışma zamanı ve derleyici kurallarından farklı olmasının nedenidir. Hem çalışma zamanı hem de derleyici, sık erişimli yollar için katı performans ölçümlerine sahiptir. Diğer birçok uygulama bunu yapamaz. Öğretim hedefimiz, herhangi bir yapıyı yasaklamamamızı zorunlu kılınıyor. Bunun yerine örnekler, yapıların ne zaman kullanılması gerektiğini gösterir. Örnekleri çoğu üretim uygulamasından daha agresif bir şekilde güncelleştiriyoruz. Benimseme hedefimiz, geçen yıl yazılmış kodlarda değişiklik gerekmese bile bugün yazmanız gereken kodu göstermemizi zorunlu kılmıştır.
Bu makalede yönergelerimiz açıklanmaktadır. Yönergeler zaman içinde gelişir ve yönergelerimizi izlemeyen örnekler bulabilirsiniz. Bu örnekleri uyumlu hale getiren PR'leri veya güncelleştirmemiz gereken örneklere dikkatimizi çeken sorunları memnuniyetle karşılıyoruz. Yönergelerimiz Açık Kaynak'tır ve PR'leri ve sorunları memnuniyetle karşılarız. Ancak, gönderiminiz bu önerileri değiştirirse, önce tartışma için bir sorun açın. Yönergelerimizi kullanabilir veya ihtiyaçlarınıza göre uyarlayabilirsiniz.
Araçlar ve çözümleyiciler
Araçlar, ekibinizin kurallarınızı uygulamalarına yardımcı olabilir. Tercih ettiğiniz kuralları zorunlu kılmak için kod analizini etkinleştirebilirsiniz. Visual Studio'nun stil yönergelerinizi otomatik olarak uygulaması için bir editorconfig dosyası oluşturabilirsiniz. Başlangıç noktası olarak, stilimizi kullanmak için dotnet/docs.editorconfig kopyalayabilirsiniz.
Bu araçlar, ekibinizin tercih ettiğiniz yönergeleri benimsemesini kolaylaştırır. Visual Studio, kodunuzu biçimlendirmek için kapsamdaki tüm .editorconfig dosyalarındaki kuralları uygular. Şirket genelinde kuralları, ekip kurallarını ve hatta ayrıntılı proje kurallarını zorunlu kılmak için birden çok yapılandırma kullanabilirsiniz.
Kod analizi, kural ihlallerini algıladığında uyarılar ve tanılamalar üretir. Projenize uygulanmasını istediğiniz kuralları yapılandırabilirsiniz. Ardından her CI derlemesi, kuralların herhangi birini ihlal ettiğinde geliştiricilere bildirir.
Tanılama kimlikleri
Dil yönergeleri
Aşağıdaki bölümlerde, .NET docs ekibinin kod örneklerini ve örneklerini hazırlamak için izlediği uygulamalar açıklanmaktadır. Genel olarak şu uygulamaları izleyin:
- Mümkün olduğunda modern dil özelliklerini ve C# sürümlerini kullanın.
- Eski dil yapılarından kaçının.
- Yalnızca düzgün bir şekilde işlenebilecek olan özel durumları yakalayın; genel özel durumları yakalamaktan kaçının. Örneğin, örnek kod özel durum filtresi olmadan System.Exception türünü yakalamamalıdır.
- Anlamlı hata iletileri sağlamak için belirli özel durum türlerini kullanın.
- Kod okunabilirliğini geliştirmek için koleksiyon düzenlemesi için LINQ sorgularını ve yöntemlerini kullanın.
- Zaman uyumsuz programlama için async ve await anahtar sözcüklerini kullanarak G/Ç'ye bağlı işlemler gerçekleştirin.
- Kilitlenmelere karşı dikkatli olun ve uygun olduğunda kullanın Task.ConfigureAwait .
- Çalışma zamanı türleri yerine veri türleri için dil anahtar sözcüklerini kullanın. Örneğin, yerine
stringveya System.String yerineintkullanınSystem.Int32. Bu öneri,nintvenuinttürlerinin kullanılmasını içerir. - İmzasız türler yerine kullanın
int. Buintkullanımı, C# genelinde yaygındır veintkullanırken diğer kitaplıklarla etkileşime geçmek daha kolaydır. Özel durumlar, imzalanmamış veri türlerine özgü belgeler içindir. - Yalnızca bir okuyucu ifadeden tür çıkarabildiğinde kullanın
var. Okuyucular örneklerimizi docs platformunda görüntüler. Değişkenlerin türünü görüntüleyen fareyle üzerine gelme veya araç ipuçları yoktur. - Netlik ve basitliği göz önünde bulundurarak kod yazın.
- Aşırı karmaşık ve karmaşık kod mantığını kullanmaktan kaçının.
Daha ayrıntılı yönergelere uyun.
Dize verileri
Aşağıdaki kodda gösterildiği gibi kısa dizeleri birleştirmek için dize ilişkilendirmesini kullanın.
string displayName = $"{nameList[n].LastName}, {nameList[n].FirstName}";Özellikle büyük miktarda metinle çalışırken dizeleri döngülere eklemek için bir System.Text.StringBuilder nesne kullanın.
var phrase = "lalalalalalalalalalalalalalalalalalalalalalalalalalalalalala"; var manyPhrases = new StringBuilder(); for (var i = 0; i < 10000; i++) { manyPhrases.Append(phrase); } //Console.WriteLine("tra" + manyPhrases);Kaçış dizileri veya kelimesi kelimesine dizeler yerine ham dize sabitlerini tercih edin.
var message = """ This is a long message that spans across multiple lines. It uses raw string literals. This means we can also include characters like \n and \t without escaping them. """;Konumsal dize ilişkilendirmesi yerine ifade tabanlı dize ilişkilendirmesini kullanın.
// Execute the queries. Console.WriteLine("scoreQuery:"); foreach (var student in scoreQuery) { Console.WriteLine($"{student.Last} Score: {student.score}"); }
Oluşturucular ve başlatma
Kayıt türlerinde birincil oluşturucu parametreleri için Pascal biçimini kullanın.
public record Person(string FirstName, string LastName);Sınıf ve yapı türlerinde birincil oluşturucu parametreleri için camel case kullanın.
Özellik değerlerinin başlatılmasını zorlamak için oluşturucular yerine
requiredözellikleri kullanın:public class LabelledContainer<T>(string label) { public string Label { get; } = label; public required T Contents { get; init; } }
Diziler ve koleksiyonlar
- Tüm koleksiyon türlerini başlatmak için koleksiyon ifadelerini kullanın:
string[] vowels = [ "a", "e", "i", "o", "u" ];
Temsilciler
- Temsilci türleri tanımlamak yerine
Func<>veAction<>kullanın. Bir sınıfta temsilci yöntemini tanımlayın.
Action<string> actionExample1 = x => Console.WriteLine($"x is: {x}");
Action<string, string> actionExample2 = (x, y) =>
Console.WriteLine($"x is: {x}, y is {y}");
Func<string, int> funcExample1 = x => Convert.ToInt32(x);
Func<int, int, int> funcExample2 = (x, y) => x + y;
- veya
Func<>temsilcisi tarafından tanımlanan imzayı kullanarak yöntemini çağırınAction<>.
actionExample1("string for x");
actionExample2("string for x", "string for y");
Console.WriteLine($"The value is {funcExample1("1")}");
Console.WriteLine($"The sum is {funcExample2(1, 2)}");
Temsilci türünden örnekler oluşturuyorsanız, kısa söz dizimini kullanın. Sınıfında, temsilci türünü ve eşleşen imzaya sahip bir yöntemi tanımlayın.
public delegate void Del(string message); public static void DelMethod(string str) { Console.WriteLine($"DelMethod argument: {str}"); }Temsilci türünün bir örneğini oluşturun ve çağırın. Aşağıdaki bildirim, sıkıştırılmış söz dizimini gösterir.
Del exampleDel2 = DelMethod; exampleDel2("Hey");Aşağıdaki bildirimde tam söz dizimi kullanılır.
Del exampleDel1 = new Del(DelMethod); exampleDel1("Hey");
try-catch özel durum işlemedeki ve using deyimleri
Çoğu özel durum işleme için try-catch deyimi kullanın.
static double ComputeDistance(double x1, double y1, double x2, double y2) { try { return Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); } catch (System.ArithmeticException ex) { Console.WriteLine($"Arithmetic overflow or underflow: {ex}"); throw; } }C# using deyimini kullanarak kodunuzu basitleştirin. Bloktaki tek kodun yöntemine
finallyyapılan bir çağrı olduğu bir try-finallyDisposevarsa, bunun yerine deyiminiusingkullanın.Aşağıdaki örnekte,
try-finallyifadesi yalnızcaDisposebloğundafinallyçağırır.Font bodyStyle = new Font("Arial", 10.0f); try { byte charset = bodyStyle.GdiCharSet; } finally { bodyStyle?.Dispose(); }Aynı şeyi bir
usingifadesiyle de yapabilirsiniz.using (Font arial = new Font("Arial", 10.0f)) { byte charset2 = arial.GdiCharSet; }Ayraç gerektirmeyen yeni
usingsöz dizimini kullanın:using Font normalStyle = new Font("Arial", 10.0f); byte charset3 = normalStyle.GdiCharSet;
&& ve || işleçleri
Karşılaştırmaları gerçekleştirirken, aşağıdaki örnekte gösterildiği gibi,
&&yerine&ve||yerine|kullanın.Console.Write("Enter a dividend: "); int dividend = Convert.ToInt32(Console.ReadLine()); Console.Write("Enter a divisor: "); int divisor = Convert.ToInt32(Console.ReadLine()); if ((divisor != 0) && (dividend / divisor) is var result) { Console.WriteLine($"Quotient: {result}"); } else { Console.WriteLine("Attempted division by 0 ends up here."); }
Bölen 0 olduğunda, if deyimindeki ikinci yan tümce çalışma zamanında bir hataya neden olacaktır. Ancak ilk ifade yanlış olduğunda && işleci kısa devre yapar. Yani, ikinci ifadeyi değerlendirmez. & operatorü her ikisini de değerlendirir ve
new operatör
Değişken türü, aşağıdaki bildirimlerde gösterildiği gibi nesne türüyle eşleştiğinde nesne örneği oluşturmanın kısa formlarından birini kullanın. Değişken bir arabirim türü veya çalışma zamanı türünün temel sınıfı olduğunda bu form geçerli değildir.
var firstExample = new ExampleClass();ExampleClass instance2 = new();Yukarıdaki bildirimler aşağıdaki bildirime eşdeğerdir.
ExampleClass secondExample = new ExampleClass();Aşağıdaki örnekte gösterildiği gibi nesne oluşturmayı basitleştirmek için nesne başlatıcıları kullanın.
var thirdExample = new ExampleClass { Name = "Desktop", ID = 37414, Location = "Redmond", Age = 2.3 };Aşağıdaki örnek, önceki örnekle aynı özellikleri ayarlar ancak başlatıcıları kullanmaz.
var fourthExample = new ExampleClass(); fourthExample.Name = "Desktop"; fourthExample.ID = 37414; fourthExample.Location = "Redmond"; fourthExample.Age = 2.3;
Etkinlik yönetimi
- Daha sonra kaldırmanız gerekmeyen bir olay işleyicisi tanımlamak için lambda ifadesi kullanın:
public Form2()
{
this.Click += (s, e) =>
{
MessageBox.Show(
((MouseEventArgs)e).Location.ToString());
};
}
Lambda ifadesi aşağıdaki geleneksel tanımı kısaltır.
public Form1()
{
this.Click += new EventHandler(Form1_Click);
}
void Form1_Click(object? sender, EventArgs e)
{
MessageBox.Show(((MouseEventArgs)e).Location.ToString());
}
Statik üyeler
Sınıf adını kullanarak statik üyeleri çağırın: ClassName.StaticMember. Bu uygulama, statik erişimi net hale getirerek kodu daha okunabilir hale getirir. Temel sınıfta tanımlanan statik bir üyeyi türetilmiş bir sınıfın adıyla nitelemeyin. Bu kod derlenmiş olsa da kod okunabilirliği yanıltıcıdır ve türetilmiş sınıfa aynı ada sahip statik bir üye eklerseniz kod gelecekte bozulabilir.
LINQ sorguları
Sorgu değişkenleri için anlamlı adlar kullanın. Aşağıdaki örnekte Seattle'da bulunan müşteriler için kullanılır
seattleCustomers.var seattleCustomers = from customer in Customers where customer.City == "Seattle" select customer.Name;Anonim türlerin özellik adlarının doğru şekilde Pascal yazımı kullanılarak büyük harfle başlamasından emin olmak için takma adlar kullanın.
var localDistributors = from customer in Customers join distributor in Distributors on customer.City equals distributor.City select new { Customer = customer, Distributor = distributor };Sonuçtaki özellik adları belirsiz olduğunda özellikleri yeniden adlandırın. Örneğin, sorgunuz bir müşteri adı ve dağıtımcı adı döndürürse, sonuçta bir
Namebiçimi olarak bırakmak yerine,CustomerNamemüşterinin adı olduğunu veDistributorNamedağıtımcının adı olduğunu netleştirmek için bunları yeniden adlandırın.var localDistributors2 = from customer in Customers join distributor in Distributors on customer.City equals distributor.City select new { CustomerName = customer.Name, DistributorName = distributor.Name };Sorgu değişkenlerinin ve aralık değişkenlerinin bildiriminde örtük yazma kullanın. LINQ sorgularında örtük yazmayla ilgili bu kılavuz, örtük olarak yazılan yerel değişkenler için genel kuralları geçersiz kılar. LINQ sorguları genellikle anonim türler oluşturan projeksiyonları kullanır. Diğer sorgu ifadeleri iç içe genel türlerle sonuç oluşturur. Örtük türemiş değişkenler genellikle daha okunabilir.
var seattleCustomers = from customer in Customers where customer.City == "Seattle" select customer.Name;Önceki örneklerde gösterildiği gibi sorgu yan tümcelerini
fromyan tümcesi altında hizalayın.Daha sonraki sorgu yan tümcelerinin azaltılmış, filtrelenmiş veri kümesinde çalıştığından emin olmak için diğer sorgu yan tümcelerinden önceki yan tümceleri kullanın
where.var seattleCustomers2 = from customer in Customers where customer.City == "Seattle" orderby customer.Name select customer;fromyan tümcesi yerine birden çokjoinyan tümcesiyle iç koleksiyonlara erişin. Örneğin, bir nesne koleksiyonuStudenther biri bir test puanı koleksiyonu içerebilir. Aşağıdaki sorgu yürütüldüğünde, 90'ın üzerindeki her puanı ve puanı alan öğrencinin soyadını döndürür.var scoreQuery = from student in students from score in student.Scores where score > 90 select new { Last = student.LastName, score };
Örtülü olarak belirtilmiş yerel değişkenler
Yerel değişkenler için değişkenin türü atamanın sağ tarafından açıkça belli olduğunda, örtük yazım kullanın.
var message = "This is clearly a string."; var currentTemperature = 27;Tür atanmanın sağ tarafında belirgin değilse var kullanmayın. Türün yöntem adından açık olduğunu varsaymayın. Değişken türü, bir
newişleci, açık bir dönüşüm veya bir değişmez değere atama ise net olarak kabul edilir.int numberOfIterations = Convert.ToInt32(Console.ReadLine()); int currentMaximum = ExampleClass.ResultSoFar();Değişkenin türünü belirtmek için değişken adlarını kullanmayın. Doğru olmayabilir. Bunun yerine türünü kullanarak türü belirtin ve değişkenin anlam bilgilerini belirtmek için değişken adını kullanın. Aşağıdaki örnek, tür için
stringve konsoldan okunan bilgilerin anlamını belirtmek içiniterationskullanılmalıdır.var inputInt = Console.ReadLine(); Console.WriteLine(inputInt);varyerine dinamik kelimesini kullanmaktan kaçının. Çalışma zamanı türü çıkarımı istediğinizde kullanındynamic. Daha fazla bilgi için bkz . Tür dinamik kullanma (C# Programlama Kılavuzu).Döngülerin
foriçinde döngü değişkeni için örtük yazım kullanın.Aşağıdaki örnek, bir
fordeyimde örtük yazma kullanır.var phrase = "lalalalalalalalalalalalalalalalalalalalalalalalalalalalalala"; var manyPhrases = new StringBuilder(); for (var i = 0; i < 10000; i++) { manyPhrases.Append(phrase); } //Console.WriteLine("tra" + manyPhrases);foreachdöngülerinde döngü değişkeninin türünü belirlemek için örtük tür belirleme kullanmayın. Çoğu durumda koleksiyondaki öğelerin türü hemen belli olmaz. Koleksiyonun adı, öğelerinin türünü çıkarmak için tek başına güvenilmemelidir.Aşağıdaki örnek bir
foreachdeyimde açık yazma kullanır.foreach (char ch in laugh) { if (ch == 'h') { Console.Write("H"); } else { Console.Write(ch); } } Console.WriteLine();LINQ sorgularındaki sonuç dizileri için örtük tür kullanın. LINQ bölümündeki bölümde birçok LINQ sorgusunun örtük türlerin kullanılması gereken anonim türlerle sonuçlandığı açıklanmaktadır. Diğer sorgular,
var'nün daha okunabilir olduğu iç içe geçmiş genel türlere neden olur.Not
Yinelenebilir koleksiyonun bir öğesi türünü yanlışlıkla değiştirmemeye dikkat edin. Örneğin, sorgunun yürütülmesini değiştiren bir System.Linq.IQueryable deyiminde System.Collections.IEnumerable'den
foreachgeçmek kolaydır.
Örneklerimizden bazıları bir ifadenin doğal türünü açıklar. Bu örneklerin derleyicinin doğal türü seçmesi için kullanması var gerekir. Bu örnekler daha az belirgin olsa da, var kullanımının örnek için gerekli olduğu belirtilmelidir. Metin davranışı açıklamalıdır.
Dosya kapsamlı ad alanı bildirimleri
Çoğu kod dosyası tek bir ad alanı bildirir. Bu nedenle, örneklerimiz dosya kapsamlı ad alanı bildirimlerini kullanmalıdır:
namespace MySampleCode;
using yönergelerini ad alanı bildiriminin dışına yerleştirin
Bir using yönerge bir ad alanı bildiriminin dışında olduğunda, içeri aktarılan ad alanı tam adıdır. Tam ad daha nettir.
using yönergesi ad alanının içinde olduğunda, bu ad alanına göre bağıl veya tam nitelikli adı olabilir.
using Azure;
namespace CoolStuff.AwesomeFeature
{
public class Awesome
{
public void Stuff()
{
WaitUntil wait = WaitUntil.Completed;
// ...
}
}
}
WaitUntil sınıfına bir başvuru (doğrudan veya dolaylı) olduğunu varsayarsak.
Şimdi biraz değiştirelim:
namespace CoolStuff.AwesomeFeature
{
using Azure;
public class Awesome
{
public void Stuff()
{
WaitUntil wait = WaitUntil.Completed;
// ...
}
}
}
Ve bugün derleniyor. Ve yarın. Ancak sonraki hafta içinde önceki (dokunulmamış) kod iki hatayla başarısız oluyor:
- error CS0246: The type or namespace name 'WaitUntil' could not be found (are you missing a using directive or an assembly reference?)
- error CS0103: The name 'WaitUntil' does not exist in the current context
Bu sınıfla ilişkili olarak bir ad alanına eklenen bağımlılıklardan biri .Azureile sonlanıyor:
namespace CoolStuff.Azure
{
public class SecretsManagement
{
public string FetchFromKeyVault(string vaultId, string secretId) { return null; }
}
}
Bir using yönerge bir ad alanına yerleştirildiğinde bağlama duyarlı olur ve ad çözümlemesini karmaşıklaştırır. Bu örnekte, bulduğu ilk ad alanıdır.
CoolStuff.AwesomeFeature.AzureCoolStuff.AzureAzure
Yeni bir ad alanı ekleyerek CoolStuff.Azure veya CoolStuff.AwesomeFeature.Azure ile eşleşen bir yapı oluşturmak, genel Azure ad alanından önce eşleşir.
global:: değiştiricisini using bildiriminize ekleyerek sorunu çözebilirsiniz. Ancak, bildirimleri using ad alanının dışına yerleştirmek bunun yerine daha kolaydır.
namespace CoolStuff.AwesomeFeature
{
using global::Azure;
public class Awesome
{
public void Stuff()
{
WaitUntil wait = WaitUntil.Completed;
// ...
}
}
}
Stil yönergeleri
Genel olarak, kod örnekleri için aşağıdaki biçimi kullanın:
- Girintileme için dört boşluk kullanın. Sekmeleri kullanmayın.
- Okunabilirliği geliştirmek için kodu tutarlı bir şekilde hizalayın.
- Belgelerde, özellikle mobil ekranlarda kod okunabilirliğini geliştirmek için satırları 65 karakterle sınırlayın.
- Uzun deyimleri birden çok satıra bölerek netliği ve kullanıcı deneyimini geliştirin.
- Süslü parantezler için "Allman" stilini kullanın: açılış ve kapanış süslü parantezini kendi yeni satırlarına yerleştirin. Ayraçlar geçerli girinti düzeyiyle hizalanmaktadır.
- Gerekirse satır sonları ikili işleçler öncesinde gerçekleşmelidir.
Açıklama stili
Kısa açıklamalar için tek satırlı açıklamaları (
//) kullanın.Daha uzun açıklamalar için çok satırlı açıklamalardan (
/* */) kaçının.
Kod örneklerindeki açıklamalar yerelleştirilmemiştir. Bu, koda eklenmiş açıklamaların çevrilmediği anlamına gelir. Daha uzun, açıklayıcı metin, yerelleştirilebilmesi için yardımcı makaleye yerleştirilmelidir.Yöntemleri, sınıfları, alanları ve tüm genel üyeleri tanımlamak için XML açıklamalarını kullanın.
Açıklamayı kod satırının sonuna değil, ayrı bir satıra yerleştirin.
Açıklama metnine büyük harfle başlayın.
Açıklama metnini noktayla sonlandırma.
Aşağıdaki örnekte gösterildiği gibi, açıklama sınırlayıcısı (
//) ile açıklama metni arasına bir boşluk ekleyin.// The following declaration creates a query. It does not run // the query.
Düzen kuralları
İyi düzen, kodunuzun yapısını vurgulama ve kodun daha kolay okunmasını sağlamak için biçimlendirme kullanır. Microsoft örnekleri aşağıdaki konvansiyonlara uygundur:
Varsayılan Kod Düzenleyicisi ayarlarını kullanın (akıllı girintileme, dört karakterli girintiler, boşluk olarak kaydedilen sekmeler). Daha fazla bilgi için bkz . Seçenekler, Metin Düzenleyicisi, C#, Biçimlendirme.
Satır başına yalnızca bir deyim yazın.
Satır başına yalnızca bir bildirim yazın.
Devamlılık satırları otomatik olarak girintili değilse, bunları bir sekme durağı (dört boşluk) girintileyin.
Yöntem tanımları ve özellik tanımları arasına en az bir boş satır ekleyin.
Aşağıdaki kodda gösterildiği gibi ifadedeki yan tümceleri görünür hale getirmek için parantez kullanın.
if ((startX > endX) && (startX > previousX)) { // Take appropriate action. }
Örneklerin, işleç veya ifadenin önceliğini açıkladığı durumlar istisnadır.
Güvenlik
Güvenli Kodlama Yönergeleri'ndeki yönergeleri izleyin.