C# 13.0'da önemli bir yenilik kısmi özellikler ve dizinlerdir. Birçok geliştirici, C# 3.0'da kısmi yöntemlerin piyasaya sürülmesinden bu dilsel özelliği bekledi. C# anahtar kelime partial C# 2.0'dan dersler alınmıştır.
Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.
Kısmi sınıflarla, miras kullanmadan farklı kodlanmış dosyalara tek bir sınıfın programının kodunu bölmek mümkündür. Bu sadece kapsamlı sınıflar için daha fazla netlik için yararlı değildir, aynı zamanda sınıfın bir kısmı otomatik olarak oluşturulduğunda ve sınıfın diğer kısmı manuel olarak yazıldığında kullanılır. Bu prosedür, .NET'te, örneğin, ASP.NET Webforms ve Blazor gibi GUI kitapçıları için, varlık çerçevesine ve varlık çerçevesinin çekirdeğine ve menşe jeneratörlerinde (örneğin düzenli ifadeler ve seriallia json için) reversa mühendisliğinde kullanılır.
C# 13.0'da geliştiriciler, sahiplik ve dizin oluşturucu tanımını ve bunların uygulanmasını da kullanabilirler. partial İki dosyaya ayrılır. Her iki taraf da aynı görünürlük ve aynı tipte Getter ve Setter ile aynı kombinasyonu oluşturmalıdır.
Somut bir örnek: Bir mülkün sınıfın bir parçası olarak halka açık bir yatağı varsa, aynı zamanda mevcut olmalı ve diğerinde halka açık olmalıdır. Ancak bir kısımda otomatik bir özellik kullanılırken, diğer tarafta açık bir uygulama olabilir.
Kısmi gerçek ve kısmi endeksler, kısmi sınıflar ve kısmi yöntemler olarak, çeşitli projeler/meclisler tarafından birleştirilemez. Tüm parçalar aynı projede olmalıdır!
Kod kitaplarındaki yenilikler
Aşağıdaki listeler, kısmi bir yöntem ve kısmi özellik ve kısmi dizinleyiciye bölünmüş bir sınıf örneğini göstermektedir.
Kodun ilk bölümü, kısmi sınıfın ilk bölümünü yalnızca sahiplik tanımlarıyla gösterir ID,, Indexer VE Print():
using System.Text.Json.Serialization;
namespace NET9_Console.CS13;
/// <summary>
/// Erster Teil der partiellen Klasse nur mit Definitionen
/// </summary>
public partial class PersonWithAutoID
{
// NEU: Partielles Property --> kein "Convert to Full Property"
public partial int ID { get; set; }
// NEU: Partieller Indexer
public partial string this[int index] { get; }
// "Normales Property"
public string Name { get; set; }
// Partielle Methode (gab es vorher schon)
public partial void Print();
}
Kısmi sınıfın ikinci bölümünde, Getter ve Setter ID ve Indexer ve yöntem Print() Uygulanan:
/// <summary>
/// Implementierung der Getter und Setter für ID, der Getter für den Indexer sowie die Methode Print()
/// </summary>
public partial class PersonWithAutoID
{
int counter = 0;
// Implementierung des Partial Property
private int iD;
public partial int ID
{
get
{
if (iD == 0) iD = ++counter;
return iD;
}
set
{
if (ID > 0) throw new ApplicationException("ID ist bereits gesetzt");
iD = value;
}
}
// Implementierung des Partial Indexer
public partial string this[int index]
{
get
{
return index switch
{
0 => ID.ToString(),
1 => Name,
_ => throw new IndexOutOfRangeException()
};
}
}
// Implementierung der Partial Method
public partial void Print()
{
Console.WriteLine($"{this.ID}: {this.Name}");
}
}
Aşağıdaki kod kompozit sınıf kullanıcısını uyguladı PersonWithAutoID:
/// <summary>
/// Client-Klasse für die Demo
/// </summary>
public class CS13_PartialPropertyAndIndexerDemoClient
{
public void Run()
{
CUI.Demo(nameof(CS13_PartialPropertyAndIndexerDemoClient));
CS13.PersonWithAutoID p = new() { Name = "Holger Schwichtenberg" };
p.Print(); // 1: Holger Schwichtenberg
CUI.H2("Versuch, die ID neu zu setzen, führt zum Fehler:");
try
{
p.ID = 42;
}
catch (Exception ex)
{
CUI.Error(ex); // System.ApplicationException: ID ist bereits gesetzt
}
CUI.Print($"Nutzung des Indexers: {p[0]}: {p[1]} ");
}
}
(RME)

Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.
Kısmi sınıflarla, miras kullanmadan farklı kodlanmış dosyalara tek bir sınıfın programının kodunu bölmek mümkündür. Bu sadece kapsamlı sınıflar için daha fazla netlik için yararlı değildir, aynı zamanda sınıfın bir kısmı otomatik olarak oluşturulduğunda ve sınıfın diğer kısmı manuel olarak yazıldığında kullanılır. Bu prosedür, .NET'te, örneğin, ASP.NET Webforms ve Blazor gibi GUI kitapçıları için, varlık çerçevesine ve varlık çerçevesinin çekirdeğine ve menşe jeneratörlerinde (örneğin düzenli ifadeler ve seriallia json için) reversa mühendisliğinde kullanılır.
C# 13.0'da geliştiriciler, sahiplik ve dizin oluşturucu tanımını ve bunların uygulanmasını da kullanabilirler. partial İki dosyaya ayrılır. Her iki taraf da aynı görünürlük ve aynı tipte Getter ve Setter ile aynı kombinasyonu oluşturmalıdır.
Somut bir örnek: Bir mülkün sınıfın bir parçası olarak halka açık bir yatağı varsa, aynı zamanda mevcut olmalı ve diğerinde halka açık olmalıdır. Ancak bir kısımda otomatik bir özellik kullanılırken, diğer tarafta açık bir uygulama olabilir.
Kısmi gerçek ve kısmi endeksler, kısmi sınıflar ve kısmi yöntemler olarak, çeşitli projeler/meclisler tarafından birleştirilemez. Tüm parçalar aynı projede olmalıdır!
Kod kitaplarındaki yenilikler
Aşağıdaki listeler, kısmi bir yöntem ve kısmi özellik ve kısmi dizinleyiciye bölünmüş bir sınıf örneğini göstermektedir.
Kodun ilk bölümü, kısmi sınıfın ilk bölümünü yalnızca sahiplik tanımlarıyla gösterir ID,, Indexer VE Print():
using System.Text.Json.Serialization;
namespace NET9_Console.CS13;
/// <summary>
/// Erster Teil der partiellen Klasse nur mit Definitionen
/// </summary>
public partial class PersonWithAutoID
{
// NEU: Partielles Property --> kein "Convert to Full Property"
public partial int ID { get; set; }
// NEU: Partieller Indexer
public partial string this[int index] { get; }
// "Normales Property"
public string Name { get; set; }
// Partielle Methode (gab es vorher schon)
public partial void Print();
}
Kısmi sınıfın ikinci bölümünde, Getter ve Setter ID ve Indexer ve yöntem Print() Uygulanan:
/// <summary>
/// Implementierung der Getter und Setter für ID, der Getter für den Indexer sowie die Methode Print()
/// </summary>
public partial class PersonWithAutoID
{
int counter = 0;
// Implementierung des Partial Property
private int iD;
public partial int ID
{
get
{
if (iD == 0) iD = ++counter;
return iD;
}
set
{
if (ID > 0) throw new ApplicationException("ID ist bereits gesetzt");
iD = value;
}
}
// Implementierung des Partial Indexer
public partial string this[int index]
{
get
{
return index switch
{
0 => ID.ToString(),
1 => Name,
_ => throw new IndexOutOfRangeException()
};
}
}
// Implementierung der Partial Method
public partial void Print()
{
Console.WriteLine($"{this.ID}: {this.Name}");
}
}
Aşağıdaki kod kompozit sınıf kullanıcısını uyguladı PersonWithAutoID:
/// <summary>
/// Client-Klasse für die Demo
/// </summary>
public class CS13_PartialPropertyAndIndexerDemoClient
{
public void Run()
{
CUI.Demo(nameof(CS13_PartialPropertyAndIndexerDemoClient));
CS13.PersonWithAutoID p = new() { Name = "Holger Schwichtenberg" };
p.Print(); // 1: Holger Schwichtenberg
CUI.H2("Versuch, die ID neu zu setzen, führt zum Fehler:");
try
{
p.ID = 42;
}
catch (Exception ex)
{
CUI.Error(ex); // System.ApplicationException: ID ist bereits gesetzt
}
CUI.Print($"Nutzung des Indexers: {p[0]}: {p[1]} ");
}
}
(RME)