Kısmi Sınıflar ve Yöntemler (C# Programlama Kılavuzu)
Makale
Bir sınıfın, yapının, arabirimin veya yöntemin tanımını iki veya daha fazla kaynak dosyaya bölmek mümkündür. Her kaynak dosya türün veya yöntem tanımının bir bölümünü içerir ve uygulama derlendiğinde tüm bölümler birleştirilir.
Kısmi Sınıflar
Sınıf tanımını bölmenin istendiğinde birkaç durum vardır:
Bir sınıfın ayrı dosyalar üzerinden bildirilmesi, birden çok programcının aynı anda üzerinde çalışmasını sağlar.
Otomatik olarak oluşturulan kaynağı içeren kaynak dosyayı yeniden oluşturmak zorunda kalmadan sınıfına kod ekleyebilirsiniz. Visual Studio, Windows Forms, Web hizmeti sarmalayıcı kodu vb. oluştururken bu yaklaşımı kullanır. Visual Studio tarafından oluşturulan dosyayı değiştirmek zorunda kalmadan bu sınıfları kullanan kod oluşturabilirsiniz.
Sınıf tanımını bölmek için kısmi anahtar sözcük değiştiricisini kullanın. Uygulamada, her kısmi sınıf genellikle ayrı bir dosyada tanımlanır ve bu da sınıfın zaman içinde yönetilmesini ve genişletilmesi kolaylaşır.
Aşağıdaki Employee örnekte sınıfın iki dosyaya nasıl bölünebileceği gösterilmektedir: Employee_Part1.cs ve Employee_Part2.cs.
C#
// This is in Employee_Part1.cspublicpartialclassEmployee
{
publicvoidDoWork()
{
Console.WriteLine("Employee is working.");
}
}
// This is in Employee_Part2.cspublicpartialclassEmployee
{
publicvoidGoToLunch()
{
Console.WriteLine("Employee is at lunch.");
}
}
//Main program demonstrating the Employee class usagepublicclassProgram
{
publicstaticvoidMain()
{
Employee emp = new Employee();
emp.DoWork();
emp.GoToLunch();
}
}
// Expected Output:// Employee is working.// Employee is at lunch.
partial anahtar sözcüğü sınıfın, yapının veya arabirimin diğer bölümlerinin ad alanında tanımlanabileceğini gösterir. Tüm parçalar anahtar sözcüğünü partial kullanmalıdır. Son türü oluşturmak için derleme zamanında tüm bölümlerin kullanılabilir olması gerekir. Tüm bölümlerin , private, vb. gibi publicaynı erişilebilirliği olmalıdır.
Herhangi bir bölüm soyut olarak bildirilirse, türün tamamı soyut olarak kabul edilir. Herhangi bir parça mühürlenmiş olarak bildirilirse, tüm tip sızdırmaz olarak kabul edilir. Herhangi bir bölüm bir temel tür bildirirse, tüm tür bu sınıfı devralır.
Temel sınıfı belirten tüm bölümlerin kabul etmesi gerekir, ancak temel sınıfı atlayan bölümler yine de temel türü devralır. Parçalar farklı temel arabirimler belirtebilir ve son tür tüm kısmi bildirimler tarafından listelenen tüm arabirimleri uygular. Kısmi bir tanımda bildirilen tüm sınıf, yapı veya arabirim üyeleri diğer tüm bölümler tarafından kullanılabilir. Son tür, derleme zamanındaki tüm parçaların birleşimidir.
Not
partial Değiştirici, temsilci veya numaralandırma bildirimlerinde kullanılamaz.
Aşağıdaki örnek, iç içe yerleştirilmiş türlerin kısmi olmasa bile kısmi olabileceğini gösterir.
Aynı türdeki parçalar olması amaçlanacak tüm kısmi tür tanımları aynı derlemede ve aynı modülde (.exe veya .dll dosyası) tanımlanmalıdır. Kısmi tanımlar birden çok modüle yayılamaz.
Sınıf adı ve genel tür parametreleri tüm kısmi tür tanımlarında eşleşmelidir. Genel türler kısmi olabilir. Her kısmi bildirim aynı parametre adlarını aynı sırada kullanmalıdır.
Kısmi tür tanımında aşağıdaki anahtar sözcükler isteğe bağlıdır, ancak bir kısmi tür tanımında varsa, aynı türün diğer kısmi tanımında da aynı anahtar sözcük belirtilmelidir:
Aşağıdaki örnekte, sınıfın alanları ve oluşturucuları Coords bir kısmi sınıf tanımında ()Coords_Part1.cs bildirilir ve PrintCoords yöntem başka bir kısmi sınıf tanımında (Coords_Part2.cs) bildirilir. Bu ayrım, daha kolay bakım için kısmi sınıfların birden çok dosyaya nasıl bölünebileceğini gösterir.
C#
// This is in Coords_Part1.cspublicpartialclassCoords
{
privateint x;
privateint y;
publicCoords(int x, int y)
{
this.x = x;
this.y = y;
}
}
// This is in Coords_Part2.cspublicpartialclassCoords
{
publicvoidPrintCoords()
{
Console.WriteLine("Coords: {0},{1}", x, y);
}
}
// Main program demonstrating the Coords class usageclassTestCoords
{
staticvoidMain()
{
Coords myCoords = new Coords(10, 15);
myCoords.PrintCoords();
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output: Coords: 10,15
Aşağıdaki örnekte kısmi yapılar ve arabirimler de geliştirebileceğiniz gösterilmektedir.
Kısmi bir sınıf veya yapı kısmi üye içerebilir. Sınıfının bir bölümü üyenin imzasını içerir. Bir uygulama aynı bölümde veya başka bir bölümde tanımlanabilir.
İmza aşağıdaki kurallara uyduğunda kısmi bir yöntem için bir uygulama gerekli değildir:
Bildirimde erişim değiştiricisi yoktur. Yöntemin varsayılan olarak erişimi vardır private .
yöntemi ve yöntemine yapılan tüm çağrılar, uygulama olmadığında derleme zamanında kaldırılır.
Özellikler ve dizin oluşturucular da dahil olmak üzere tüm bu kısıtlamalara uymayan tüm yöntemler bir uygulama sağlamalıdır. Bu uygulama bir kaynak oluşturucu tarafından sağlanabilir. Kısmi özellikler otomatik olarak uygulanan özellikler kullanılarak uygulanamaz. Derleyici, otomatik olarak uygulanan bir özellik ile kısmi özelliğin bildirim bildirimi arasında ayrım yapamaz.
C# 13'le başlayarak, kısmi bir özellik için uygulama bildirimi, uygulama bildirimini tanımlamak için alan destekli özellikleri kullanabilir. Alan destekli özellik, anahtar sözcüğün field özelliği için derleyici tarafından sentezlenen yedekleme alanına eriştiği kısa bir söz dizimi sağlar. Örneğin, aşağıdakileri yazabilirsiniz:
C#
// in file1.cspublicpartialclassPropertyBag
{
// Defining declarationpublicpartialint MyProperty { get; set; }
}
// In file2.cspublicpartialclassPropertyBag
{
// Defining declarationpublicpartialint MyProperty { get => field; set; }
}
veya erişimcisinde getset veya her ikisinde de kullanabilirsinizfield.
Önemli
Anahtar field sözcük, C# 13'teki bir önizleme özelliğidir. Bağlamsal anahtar sözcüğü kullanmak için preview proje dosyanızda .NET 9 kullanıyor field olmanız ve öğenizi <LangVersion> olarak ayarlamanız gerekir.
adlı fieldbir alanı olan bir sınıfta anahtar sözcük özelliğini kullanırken field dikkatli olmalısınız. Yeni field anahtar sözcük, özellik erişimcisi kapsamında adlı field bir alanın gölgesini oluşturur. Değişkenin adını değiştirebilir veya tanımlayıcıya olarak başvurmak field için belirteci kullanabilirsiniz@.@fieldfield Anahtar sözcüğü için özellik belirtimini field okuyarak daha fazla bilgi edinebilirsiniz.
Kısmi yöntemler, sınıfın bir bölümünün uygulayıcısının üye bildirmesini sağlar. Sınıfın başka bir bölümünün uygulayıcısı bu üyeyi tanımlayabilir. Bu ayırmanın yararlı olduğu iki senaryo vardır: ortak kod oluşturan şablonlar ve kaynak oluşturucular.
Şablon kodu: Oluşturulan kodun yöntemi çağırabilmesi için şablon bir yöntem adı ve imza ayırır. Bu yöntemler, bir geliştiricinin yöntemi uygulayıp uygulamayeceğine karar vermesine olanak tanıyan kısıtlamaları izler. Yöntem uygulanmazsa, derleyici yöntem imzasını ve yöntemine yapılan tüm çağrıları kaldırır. Çağrılardaki bağımsız değişkenlerin değerlendirilmesinden elde edecek sonuçlar da dahil olmak üzere yöntemine yapılan çağrıların çalışma zamanında hiçbir etkisi olmaz. Bu nedenle, kısmi sınıftaki herhangi bir kod, uygulama sağlanmıyor olsa bile kısmi bir yöntemi serbestçe kullanabilir. Yöntem çağrılır ancak uygulanmazsa derleme zamanı veya çalışma zamanı hatası olmaz.
Kaynak oluşturucular: Kaynak oluşturucular üyeler için bir uygulama sağlar. İnsan geliştirici üye bildirimini ekleyebilir (genellikle kaynak oluşturucu tarafından okunan özniteliklerle). Geliştirici bu üyeleri çağıran kod yazabilir. Kaynak oluşturucu derleme sırasında çalışır ve uygulamayı sağlar. Bu senaryoda, çoğu zaman uygulanamayabilecek kısmi üyeler için kısıtlamalara uyulmuyor.
C#
// Definition in file1.cspartialvoidOnNameChanged();
// Implementation in file2.cspartialvoidOnNameChanged()
{
// method body
}
Kısmi üye bildirimleri, kısmi bağlamsal anahtar sözcükle başlamalıdır.
Kısmi türün her iki kısmındaki kısmi üye imzalarının eşleşmesi gerekir.
Kısmi üye statik ve güvenli olmayan değiştiricilere sahip olabilir.
Kısmi üye genel olabilir. Kısıtlamalar, yöntem bildirimini tanımlama ve uygulama konusunda aynı olmalıdır. Parametre ve tür parametre adlarının uygulama bildiriminde tanımlamadakiyle aynı olması gerekmez.
Daha fazla bilgi için bkz. C# Dil Belirtimi'nde Kısmi türler ve Kısmi yöntemler. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır. Kısmi yöntemler için yeni özellikler özellik belirtiminde tanımlanır.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Statik sınıflar, kısmi sınıflar ve kodunuzun okunabilirliğini, sürdürülebilirliğini ve düzenlemesini geliştirebilen nesne başlatıcılar gibi gelişmiş teknikleri kullanarak sınıfları uygulamayı öğrenin.
C# içindeki tüm türler ve tür üyeleri, diğer kodlardan kullanılıp kullanılamayacağını denetleen bir erişilebilirlik düzeyine sahiptir. Bu erişim değiştiricileri listesini gözden geçirin.
C# dilindeki uzantı yöntemleri, yeni türetilmiş bir tür oluşturmadan, yeniden derlemeden veya özgün türü başka bir şekilde değiştirmeden mevcut türlere yöntemler eklemenize olanak tanır.