C# 11.0 için yeni bir özellik tanım türü açıklanmıştır. Şimdi .NET 9.0'da C#derleyicisinin on üçüncü versiyonu ile, işlevin deneysel olarak olan yarı otomobil özelliklerini içerir. Bu nedenle, yalnızca bir proje dosyasında kullanılabilir <EnablePreviewFeatures>True</EnablePreviewFeatures> VEYA <LangVersion>preview</LangVersion> ayarlamak.
Duyuru
Holger Schwichtenberg, 53 ünlü uzmanla, danışmanlık ve eğitim ve yazılımın geliştirilmesinde çok sayıda orta ölçekli 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.
Yarı otomatik bir özellik (yarı otomatik özellikler), tam özellikler ile otomatik doğru arasındaki boşluğu etkiler. Başlangıçta sadece C#'da, standart okuma ve yazma veri durumu için depolama alanı gibi bir kapı ve bir ayarlayıcı ve bir alanın uygulanması gereken tam özellikler vardı. Zaten C# 3.0'da, jette ve setterde sahadan, sahada, saha beyanında arşivleyen verileri okuyan veya setterde hiçbir şey yapılmaması durumunda başka hiçbir şeyiniz olmadığı otomatik özellikler geldi. Getirici ve Setter'den uygulanabilir. C# 6.0'dan beri, otomatik özellikler doğrudan beyanda da başlatılabilir.
Ancak, Getter ve/veya Setter doğrulama veya bildirim gibi kapsamlı işlevler içermez, otomatik bir özellik artık bir seçenek değildi. Burada yeni yarı araçlık özellik atlamaları: Getter ve Setter uygulayabilirsiniz, ancak açıkça bir alan beyan etmeniz gerekmez. Bunun yerine, yeni anahtar kelime kullanılır field. Derleyici, depolama alanı olarak otomatik olarak bir alan oluşturur.
Yarı automatik bir özellik ile aşağıdaki seçenekler vardır:
Geliştirme ortamı, çekimde derleyicinin anahtar kelime alanı alanında bir alan oluşturacağını gösterir.
(Resim: Ekran görüntüsü (Holger Schwichtenberg))
Bir programlama diline yeni bir anahtar kelimenin tanıtılması, her zaman mevcut tanımlayıcılarla adlandırılan bir çarpışma riskine ev sahipliği yapar. Kodunuzda bir adı olan bir alan iseniz field Bunun yerine sahip olmalısın @field VEYA this.field Bu mevcut alanı kullanmaya devam etmek için yazın.
Aşağıdaki kod, karşılaştırmalı olarak eksiksiz bir özellik, otomatik bir özellik ve yarı -otomatik bir özelliği göstermektedir:
namespace NET9_Console.CS13;
/// <summary>
/// Klasse mit Semi-Auto Properties.
/// The feature 'field keyword' is currently in Preview and *unsupported*. To use Preview features, use the 'preview' language version.
/// <EnablePreviewFeatures>True</EnablePreviewFeatures> oder <LangVersion>preview</LangVersion>-->
/// </summary>
class PersonWithID
{
/// <summary>
/// Auto Property
/// </summary>
public string Name { get; set; } = "unbekannt";
private string company = "Freelancer";
/// <summary>
/// Full Properties
/// </summary>
public string Company
{
get => company; set
{
if (value == null)
{
throw new ArgumentOutOfRangeException();
}
company = value;
}
}
/// <summary>
/// Semi-Auto Property
/// </summary>
public int ID
{
get;
set // init auch erlaubt!
{
if (value < 0) throw new ArgumentOutOfRangeException();
if (field > 0) throw new ApplicationException("ID schon gesetzt");
field = value;
}
} = -1;
}
/// <summary>
/// Client für Semi-Auto Properties
/// </summary>
class CS13_SemiAutoProperties
{
public void Run()
{
CUI.Demo(nameof(CS13_SemiAutoProperties));
PersonWithID p = new PersonWithID();
Console.WriteLine($"{p.ID}: {p.Name} arbeitet bei {p.Company}");
p.ID = 42;
p.Name = "Dr. Holger Schwichtenberg";
p.Company = "www.IT-Visions.de";
Console.WriteLine($"{p.ID}: {p.Name} arbeitet bei {p.Company}");
try
{
p.ID = 43;
}
catch (Exception ex)
{
CUI.PrintError(ex.Message); // "ID schon gesetzt"
}
}
}
(RME)
Duyuru

Holger Schwichtenberg, 53 ünlü uzmanla, danışmanlık ve eğitim ve yazılımın geliştirilmesinde çok sayıda orta ölçekli 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.
Yarı otomatik bir özellik (yarı otomatik özellikler), tam özellikler ile otomatik doğru arasındaki boşluğu etkiler. Başlangıçta sadece C#'da, standart okuma ve yazma veri durumu için depolama alanı gibi bir kapı ve bir ayarlayıcı ve bir alanın uygulanması gereken tam özellikler vardı. Zaten C# 3.0'da, jette ve setterde sahadan, sahada, saha beyanında arşivleyen verileri okuyan veya setterde hiçbir şey yapılmaması durumunda başka hiçbir şeyiniz olmadığı otomatik özellikler geldi. Getirici ve Setter'den uygulanabilir. C# 6.0'dan beri, otomatik özellikler doğrudan beyanda da başlatılabilir.
Ancak, Getter ve/veya Setter doğrulama veya bildirim gibi kapsamlı işlevler içermez, otomatik bir özellik artık bir seçenek değildi. Burada yeni yarı araçlık özellik atlamaları: Getter ve Setter uygulayabilirsiniz, ancak açıkça bir alan beyan etmeniz gerekmez. Bunun yerine, yeni anahtar kelime kullanılır field. Derleyici, depolama alanı olarak otomatik olarak bir alan oluşturur.
Yarı automatik bir özellik ile aşağıdaki seçenekler vardır:
- Getter veya Setter hariç tutulabilir; Sadece ikisinden birine ihtiyacın var.
- Yerine setde yapabilir init kullanılabilir. Yani sadece başlangıç için yarı -otomatik bir özelliğiniz var.
- Sonunda, yarı -otomatik bir özellik bir değerle başlatılabilir.

Geliştirme ortamı, çekimde derleyicinin anahtar kelime alanı alanında bir alan oluşturacağını gösterir.
(Resim: Ekran görüntüsü (Holger Schwichtenberg))
Bir programlama diline yeni bir anahtar kelimenin tanıtılması, her zaman mevcut tanımlayıcılarla adlandırılan bir çarpışma riskine ev sahipliği yapar. Kodunuzda bir adı olan bir alan iseniz field Bunun yerine sahip olmalısın @field VEYA this.field Bu mevcut alanı kullanmaya devam etmek için yazın.
Aşağıdaki kod, karşılaştırmalı olarak eksiksiz bir özellik, otomatik bir özellik ve yarı -otomatik bir özelliği göstermektedir:
namespace NET9_Console.CS13;
/// <summary>
/// Klasse mit Semi-Auto Properties.
/// The feature 'field keyword' is currently in Preview and *unsupported*. To use Preview features, use the 'preview' language version.
/// <EnablePreviewFeatures>True</EnablePreviewFeatures> oder <LangVersion>preview</LangVersion>-->
/// </summary>
class PersonWithID
{
/// <summary>
/// Auto Property
/// </summary>
public string Name { get; set; } = "unbekannt";
private string company = "Freelancer";
/// <summary>
/// Full Properties
/// </summary>
public string Company
{
get => company; set
{
if (value == null)
{
throw new ArgumentOutOfRangeException();
}
company = value;
}
}
/// <summary>
/// Semi-Auto Property
/// </summary>
public int ID
{
get;
set // init auch erlaubt!
{
if (value < 0) throw new ArgumentOutOfRangeException();
if (field > 0) throw new ApplicationException("ID schon gesetzt");
field = value;
}
} = -1;
}
/// <summary>
/// Client für Semi-Auto Properties
/// </summary>
class CS13_SemiAutoProperties
{
public void Run()
{
CUI.Demo(nameof(CS13_SemiAutoProperties));
PersonWithID p = new PersonWithID();
Console.WriteLine($"{p.ID}: {p.Name} arbeitet bei {p.Company}");
p.ID = 42;
p.Name = "Dr. Holger Schwichtenberg";
p.Company = "www.IT-Visions.de";
Console.WriteLine($"{p.ID}: {p.Name} arbeitet bei {p.Company}");
try
{
p.ID = 43;
}
catch (Exception ex)
{
CUI.PrintError(ex.Message); // "ID schon gesetzt"
}
}
}
(RME)