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.
Kodunuzdaki öğelere uygulanabilen ve bu öğelere anlamsal anlam katan çeşitli öznitelikler vardır:
-
Conditional
: Bir yöntemin yürütülmesini önişlemci tanımlayıcıya bağımlı hale getirin. -
Obsolete
: Bir türü veya üyeyi (olası) gelecekte kaldırılma amacıyla işaretleyin. -
Deprecated
: (Windows Foundation) Gelecekte kaldırılma olasılığı olan bir türü veya üyeyi işaretleyin. -
Experimental
: Bir türü veya üyeyi deneysel olarak işaretleyin. -
SetsRequiredMembers
: Oluşturucunun tüm gerekli özellikleri ayarlandığını gösterir. -
AttributeUsage
: Özniteliğin uygulanabileceği dil öğelerini bildirin. -
AsyncMethodBuilder
: Zaman uyumsuz bir yöntem oluşturucu türü bildirin. -
InterpolatedStringHandler
: Bilinen bir senaryo için ilişkilendirilmiş bir dize oluşturucu tanımlayın. -
ModuleInitializer
: Modülü başlatan bir yöntem bildirin. -
SkipLocalsInit
: Yerel değişken depolamayı 0 olarak başlatan kodu elide edin. -
UnscopedRef
: Normalderef
olarak yorumlanan birscoped
değişkenin kapsamsız kabul edilmesi gerektiğini bildirin. -
OverloadResolutionPriority
: Belirsiz aşırı yüklemeler için aşırı yükleme çözünürlüğünü etkilemek için bir tiebreaker özniteliği ekleyin. -
EnumeratorCancellation
: Zaman uyumsuz bir numaralandırıcıdaki iptal belirtecinin parametresini belirtin. -
CollectionBuilder
: Koleksiyon ifadesi bu koleksiyon türüne dönüştürüldüğünde koleksiyon türü için oluşturucu yöntemini belirtin. -
InlineArray
:struct
türünün satır içi diziolduğunu belirtin. -
IUnknownConstant
: Varsayılan parametre için eksik bağımsız değişkenin nasıl sağlanması gerektiğini belirtir. -
IDispatchConstant
: Varsayılan parametre için eksik bağımsız değişkenin nasıl sağlanması gerektiğini belirtir.
Derleyici, çıkışını değiştirmek ve kodunuzu kullanan geliştiriciler tarafından yapılan olası hataları bildirmek için bu anlamsal anlamları kullanır.
Conditional
özniteliği
özniteliği, Conditional
bir yöntemin yürütülmesini ön işleme tanımlayıcıya bağımlı hale getirir.
Conditional
özniteliği için ConditionalAttributebir diğer addır ve bir yönteme veya öznitelik sınıfına uygulanabilir.
Aşağıdaki örnekte, Conditional
programa özgü tanılama bilgilerinin görüntülenmesini etkinleştirmek veya devre dışı bırakmak için bir yönteme uygulanır:
#define TRACE_ON
using System.Diagnostics;
namespace AttributeExamples;
public class Trace
{
[Conditional("TRACE_ON")]
public static void Msg(string msg)
{
Console.WriteLine(msg);
}
}
public class TraceExample
{
public static void Main()
{
Trace.Msg("Now in Main...");
Console.WriteLine("Done.");
}
}
TRACE_ON
Tanımlayıcı tanımlanmamışsa izleme çıkışı görüntülenmez. Etkileşimli pencerede kendiniz keşfedin.
Conditional
özniteliği, aşağıdaki örnekte gösterildiği gibi DEBUG
tanımlayıcı ile birlikte, sürüm derlemeleri için değil, hata ayıklama derlemelerinde izleme ve günlüğe kaydetme özelliklerini etkinleştirmek amacıyla sıkça kullanılır:
[Conditional("DEBUG")]
static void DebugMethod()
{
}
Koşullu olarak işaretlenmiş bir yöntem çağrıldığında, belirtilen ön işleme simgesinin varlığı veya yokluğu derleyicinin yöntemine çağrıları içerip içermediğini veya atlayıp atlamayacağını belirler. Simge tanımlanmışsa çağrı eklenir; aksi takdirde çağrı atlanır. Koşullu yöntem, bir sınıf veya yapı bildiriminde bir yöntem olmalı ve dönüş türüne sahip void
olmalıdır.
Conditional
kullanmak, #if…#endif
bloklarındaki yöntemleri kullanmaktan daha temiz, daha zarif ve daha az hataya yatkın bir yöntemdir.
Bir yöntemin birden çok Conditional
özniteliği varsa, bir veya daha fazla koşullu simge tanımlanmışsa derleyici yöntemine çağrılar içerir (simgeler OR işleci kullanılarak mantıksal olarak birbirine bağlanır). Aşağıdaki örnekte, veya A
varlığının B
bir yöntem çağrısına neden olması:
[Conditional("A"), Conditional("B")]
static void DoIfAorB()
{
// ...
}
Öznitelik sınıflarıyla kullanma Conditional
Özniteliği bir Conditional
öznitelik sınıfı tanımına da uygulanabilir. Aşağıdaki örnekte, özel öznitelik Documentation
tanımlanmışsa DEBUG
meta veriye bilgi ekler.
[Conditional("DEBUG")]
public class DocumentationAttribute : System.Attribute
{
string text;
public DocumentationAttribute(string text)
{
this.text = text;
}
}
class SampleClass
{
// This attribute will only be included if DEBUG is defined.
[Documentation("This method displays an integer.")]
static void DoWork(int i)
{
System.Console.WriteLine(i.ToString());
}
}
Obsolete
ve Deprecated
özniteliği
Obsolete
özniteliği bir kod öğesini artık kullanılması önerilmez olarak işaretler. Kullanım dışı olarak işaretlenen bir varlığın kullanılması bir uyarı veya hata oluşturur. özniteliği Obsolete
tek kullanımlık bir özniteliktir ve özniteliklere izin veren herhangi bir varlığa uygulanabilir.
Obsolete
, için ObsoleteAttributebir diğer addır.
Aşağıdaki örnekte özniteliği sınıfına Obsolete
A
ve yöntemine B.OldMethod
uygulanır.
B.OldMethod
üzerine uygulanan öznitelik oluşturucusunun ikinci bağımsız değişkeni true
olarak ayarlandığından, bu yöntem derleyici hatasına neden olurken, A
sınıfının kullanılması bir uyarı üretir.
B.NewMethod
Ancak çağrısı hiçbir uyarı veya hata üretmez. Örneğin, önceki tanımlarla kullandığınızda, aşağıdaki kod iki uyarı ve bir hata oluşturur:
namespace AttributeExamples
{
[Obsolete("use class B")]
public class A
{
public void Method() { }
}
public class B
{
[Obsolete("use NewMethod", true)]
public void OldMethod() { }
public void NewMethod() { }
}
public static class ObsoleteProgram
{
public static void Main()
{
// Generates 2 warnings:
A a = new A();
// Generate no errors or warnings:
B b = new B();
b.NewMethod();
// Generates an error, compilation fails.
// b.OldMethod();
}
}
}
Öznitelik oluşturucusunun ilk bağımsız değişkeni olarak sağlanan dize, uyarı veya hata mesajının bir parçası olarak görüntülenir. Sınıf A
için iki uyarı oluşturulur: biri sınıf başvurusunun bildirimi için, diğeri de sınıf oluşturucu için.
Obsolete
özniteliği bağımsız değişken olmadan kullanılabilir, ancak bunun yerine ne kullanılacağına ilişkin bir açıklama da önerilir. Adların eşleştiğinden emin olmak için sabit dize ilişkilendirmesini ve nameof
işlecini kullanabilirsiniz:
public class B
{
[Obsolete($"use {nameof(NewMethod)} instead", true)]
public void OldMethod() { }
public void NewMethod() { }
}
Windows Foundation Meta Veri kitaplıkları Windows.Foundation.Metadata.DeprecatedAttributeyerine ObsoleteAttribute
kullanır.
Experimental
öznitelikleri
C# 12'de başlayarak, türler, yöntemler ve derlemeler deneysel bir özelliği göstermek için ile System.Diagnostics.CodeAnalysis.ExperimentalAttribute işaretlenebilir.
ExperimentalAttribute ile açıklama eklenmiş bir yönteme veya türe erişirseniz, derleyici bir uyarı oluşturur. Özniteliğiyle işaretlenmiş bir derlemede veya modülde Experimental
bildirilen tüm türler deneyseldir. Bunlardan herhangi birine erişirseniz derleyici bir uyarı görüntüler. Deneysel bir özelliğin pilotu olmak için bu uyarıları devre dışı bırakabilirsiniz.
Uyarı
Deneysel özellikler değişikliklere tabidir. API'ler değişebilir veya gelecekteki güncelleştirmelerde kaldırılabilir. Deneysel özellikleri dahil etmek, kitaplık yazarlarının gelecekteki gelişime yönelik fikirler ve kavramlar hakkında geri bildirim almalarının bir yoludur. Deneysel olarak işaretlenmiş herhangi bir özelliği kullanırken çok dikkatli olun. önizleme API'lerimakalemizde API'lerin nasıl deneysel olarak işaretleneceği hakkında daha fazla bilgi edinebilirsiniz.
Özellik belirtiminde Experimental
özniteliği hakkında daha fazla ayrıntı okuyabilirsiniz.
Windows Foundation Meta Veri kitaplıkları, C# 12'nin öncesi olan Windows.Foundation.Metadata.ExperimentalAttributekullanır.
SetsRequiredMembers
özniteliği
Özellik, SetsRequiredMembers
derleyiciye bir oluşturucunun bu sınıf veya yapıdaki tüm required
üyelerini ayarladığını bildirir. Derleyici, özniteliğine sahip herhangi bir oluşturucunun System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute tüm required
üyeleri başlatmış olduğunu varsayar. Böyle bir oluşturucuyu çağıran herhangi bir kodun gerekli üyeleri ayarlamak için nesne başlatıcılara ihtiyacı yoktur. özniteliğini SetsRequiredMembers
eklemek öncelikli olarak konumsal kayıtlar ve birincil oluşturucular için yararlıdır.
AttributeUsage
özniteliği
özniteliği, AttributeUsage
özel öznitelik sınıfının nasıl kullanılabileceğini belirler.
AttributeUsageAttribute , özel öznitelik tanımlarına uyguladığınız bir özniteliktir. özniteliği şunları AttributeUsage
denetlemenizi sağlar:
- Özniteliğin uygulanabileceği program öğeleri. Kullanımını kısıtlamadığınız sürece, aşağıdaki program öğelerinin herhangi birine bir öznitelik uygulanabilir:
- Montaj
- Modül
- Alan
- Etkinlik
- Metot
- Parametre
- Özellik
- İade
- Tür
- Bir özniteliğin tek bir program öğesine birden çok kez uygulanıp uygulanamayacağı.
- Türetilmiş sınıfların öznitelikleri devralıp devralmadığı.
Varsayılan ayarlar açıkça uygulandığında aşağıdaki örneğe benzer:
[AttributeUsage(AttributeTargets.All,
AllowMultiple = false,
Inherited = true)]
class NewAttribute : Attribute { }
Bu örnekte sınıfı desteklenen NewAttribute
herhangi bir program öğesine uygulanabilir. Ancak her varlığa yalnızca bir kez uygulanabilir. Türetilmiş sınıflar bir temel sınıfa uygulanan özniteliği devralır.
AllowMultiple ve Inherited bağımsız değişkenleri isteğe bağlıdır, bu nedenle aşağıdaki kod aynı etkiye sahiptir:
[AttributeUsage(AttributeTargets.All)]
class NewAttribute : Attribute { }
İlk AttributeUsageAttribute bağımsız değişken, enumerasyonun AttributeTargets bir veya daha fazla öğesi olmalıdır. Aşağıdaki örnekte gösterildiği gibi, OR işleciyle birden çok hedef türü birbirine bağlanabilir:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
class NewPropertyOrFieldAttribute : Attribute { }
Öznitelikler, otomatik olarak uygulanan bir özelliğin özelliğine veya yedekleme alanına uygulanabilir. Bu öznitelik, field
belirleyici şeklinde belirtilmediği sürece özelliğe uygulanır. Her ikisi de aşağıdaki örnekte gösterilmiştir:
class MyClass
{
// Attribute attached to property:
[NewPropertyOrField]
public string Name { get; set; } = string.Empty;
// Attribute attached to backing field:
[field: NewPropertyOrField]
public string Description { get; set; } = string.Empty;
}
AllowMultiple Bağımsız değişken isetrue
, aşağıdaki örnekte gösterildiği gibi sonuçta elde edilen öznitelik tek bir varlığa birden çok kez uygulanabilir:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
class MultiUse : Attribute { }
[MultiUse]
[MultiUse]
class Class1 { }
[MultiUse, MultiUse]
class Class2 { }
Bu durumda, MultiUseAttribute
AllowMultiple
olarak ayarlandığı için true
tekrar tekrar uygulanabilir. Birden çok öznitelik uygulamak için gösterilen her iki biçim de geçerlidir.
Eğer Inheritedfalse
ise, türetilmiş sınıflar özniteliği öznitelikli bir temel sınıftan devralmaz. Örneğin:
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
class NonInheritedAttribute : Attribute { }
[NonInherited]
class BClass { }
class DClass : BClass { }
Bu durumda devralma NonInheritedAttribute
yoluyla uygulanmaz DClass
.
Bir özniteliğin nereye uygulanacağını belirtmek için bu anahtar sözcükleri de kullanabilirsiniz. Örneğin, tanımlayıcıyı field:
kullanarak otomatik olarak uygulanan bir özelliğin yedekleme alanına öznitelik ekleyebilirsiniz. Alternatif olarak, bir konumsal kayıttan oluşturulan öğelerden herhangi birine öznitelik uygulamak için , field:
veya property:
tanımlayıcısını da kullanabilirsinizparam:
. Örnek için bkz . Özellik tanımı için konumsal söz dizimi.
AsyncMethodBuilder
özniteliği
Özniteliğini System.Runtime.CompilerServices.AsyncMethodBuilderAttribute zaman uyumsuz dönüş türü olabilecek bir türe eklersiniz. Özniteliği, belirtilen tür, zaman uyumsuz bir yöntemden döndürüldüğünde, zaman uyumsuz yöntem uygulamasını oluşturan türü belirtir. Özniteliği aşağıdaki AsyncMethodBuilder
türe uygulanabilir:
- Erişilebilir
GetAwaiter
bir yöntemi vardır. -
GetAwaiter
yöntemi tarafından döndürülen nesne, System.Runtime.CompilerServices.ICriticalNotifyCompletion arabirimini uygular.
özniteliğinin AsyncMethodBuilder
oluşturucusu, ilişkili oluşturucunun türünü belirtir. Oluşturucu aşağıdaki erişilebilir üyeleri uygulamalıdır:
Oluşturucunun türünü döndüren statik
Create()
bir yöntem.Eşzamansız dönüş türünü döndüren okunabilir bir
Task
özelliği.Bir
void SetException(Exception)
görev hataladığında özel durumu ayarlayan bir yöntem.void SetResult()
Görevi tamamlandı olarak işaretleyen ve isteğe bağlı olarak görevin sonucunu ayarlayan veyavoid SetResult(T result)
yöntemiStart
Aşağıdaki API imzasını içeren bir yöntem:public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : System.Runtime.CompilerServices.IAsyncStateMachine
SetStateMachine
Aşağıdaki API imzasını içeren bir yöntem:public void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine stateMachine)
AwaitOnCompleted
Aşağıdaki imzaya sahip bir yöntem:public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : System.Runtime.CompilerServices.INotifyCompletion where TStateMachine : System.Runtime.CompilerServices.IAsyncStateMachine
AwaitUnsafeOnCompleted
Aşağıdaki imzaya sahip bir yöntem:public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : System.Runtime.CompilerServices.ICriticalNotifyCompletion where TStateMachine : System.Runtime.CompilerServices.IAsyncStateMachine
Zaman uyumsuz yöntem oluşturucuları hakkında daha fazla bilgi edinmek için, .NET tarafından sağlanan şu oluşturuculara göz atabilirsiniz:
- System.Runtime.CompilerServices.AsyncTaskMethodBuilder
- System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>
- System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder
- System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder<TResult>
AsyncMethodBuilder
özniteliği, oluşturucuyu bu tür için aşmak amacıyla eşzamansız bir yönteme uygulanabilir.
InterpolatedStringHandler
ve InterpolatedStringHandlerArguments
öznitelikleri
Bir türünstring
içerir. Interpolasyon dizelerinin nasıl işlendiğini kontrol etmek istediğiniz başka örnekleriniz de olabilir. İşleyicinizi uygulayan türe System.Runtime.CompilerServices.InterpolatedStringHandlerAttribute'i uygularsınız. Siz System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute'i o türün oluşturucusunun parametrelerine uygularsınız.
ilişkilendirilmiş dize geliştirmeleri
ModuleInitializer
özniteliği
özniteliği, ModuleInitializer
derleme yüklendiğinde çalışma zamanının çağırdığını bir yöntemi işaretler.
ModuleInitializer
, için ModuleInitializerAttributebir diğer addır.
ModuleInitializer
özniteliği yalnızca şu yönteme uygulanabilir:
- Statiktir.
- Parametresizdir.
-
void
döndürür. - veya içeren modülden
internal
public
erişilebilir. - Genel bir yöntem değildir.
- genel bir sınıfta yer almıyor.
- Yerel bir işlev değildir.
ModuleInitializer
Özniteliği birden çok yönteme uygulanabilir. Bu durumda, çalışma zamanının onları çağırma sırası belirleyicidir ancak belirtilmez.
Aşağıdaki örnekte birden çok modül başlatıcı yönteminin kullanımı gösterilmektedir.
Init1
ve Init2
yöntemleri, Main
'den önce çalışır ve her biri Text
özelliğine bir dize ekler. Bu nedenle Main
çalıştırıldığında, Text
özelliğinde zaten her iki başlatıcı yöntemden gelen dizeler vardır.
using System;
internal class ModuleInitializerExampleMain
{
public static void Main()
{
Console.WriteLine(ModuleInitializerExampleModule.Text);
//output: Hello from Init1! Hello from Init2!
}
}
using System.Runtime.CompilerServices;
internal class ModuleInitializerExampleModule
{
public static string? Text { get; set; }
[ModuleInitializer]
public static void Init1()
{
Text += "Hello from Init1! ";
}
[ModuleInitializer]
public static void Init2()
{
Text += "Hello from Init2! ";
}
}
Kaynak kodu oluşturucularının bazen başlatma kodu oluşturması gerekir. Modül başlatıcılar bu kod için standart bir yer sağlar. Diğer çoğu durumda, modül başlatıcısı yerine statik bir oluşturucu yazmanız gerekir.
SkipLocalsInit
özniteliği
SkipLocalsInit
özniteliği, meta veriye kopyalanırken derleyicinin .locals init
bayrağını ayarlamasını engeller.
SkipLocalsInit
özniteliği tek kullanımlık bir özniteliktir ve bir yönteme, özelliğe, sınıfa, yapıya, arabirime veya modüle uygulanabilir ancak derlemeye uygulanamayabilir.
SkipLocalsInit
, için SkipLocalsInitAttributebir diğer addır.
bayrağı, .locals init
CLR'nin bir yöntemde bildirilen tüm yerel değişkenleri varsayılan değerlerine başlatmasına neden olur. Derleyici ayrıca bir değer atamadan önce hiçbir zaman bir değişken kullanmadığınızdan emin olduğundan, .locals init
genellikle gerekli değildir. Ancak, ek sıfır başlangıcının, stackalloc kullanarak yığında bir dizi ayırdığınız bazı senaryolarda ölçülebilir bir performans etkisi olabilir. Bu gibi durumlarda özniteliğini SkipLocalsInit
ekleyebilirsiniz. Bir yönteme doğrudan uygulanırsa, öznitelik bu yöntemi ve lambdalar ve yerel işlevler de dahil olmak üzere iç içe tüm işlevlerini etkiler. Bir türe veya modüle uygulanırsa, iç içe yerleştirilmiş tüm yöntemleri etkiler. Bu öznitelik soyut yöntemleri etkilemez, ancak uygulama için oluşturulan kodu etkiler.
Bu öznitelik AllowUnsafeBlocks derleyici seçeneğini gerektirir. Bu gereksinim bazı durumlarda kodun atanmamış belleği görüntüleyebildiğini (örneğin, başlatılmamış yığına ayrılan bellekten okuma) işaret eder.
Aşağıdaki örnekte özniteliğin SkipLocalsInit
kullanan stackalloc
bir yöntem üzerindeki etkisi gösterilmektedir. yöntemi, tamsayı dizisi ayrıldığında bellekte ne varsa görüntüler.
[SkipLocalsInit]
static void ReadUninitializedMemory()
{
Span<int> numbers = stackalloc int[120];
for (int i = 0; i < 120; i++)
{
Console.WriteLine(numbers[i]);
}
}
// output depends on initial contents of memory, for example:
//0
//0
//0
//168
//0
//-1271631451
//32767
//38
//0
//0
//0
//38
// Remaining rows omitted for brevity.
Bu kodu kendiniz denemek için .csprojAllowUnsafeBlocks
derleyici seçeneğini ayarlayın:
<PropertyGroup>
...
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
UnscopedRef
özniteliği
UnscopedRef
özniteliği bir değişken bildirimini kapsamsız olarak işaretler, yani başvurunun kapsam dışına çıkmasına izin verilir.
Derleyicinin ref
'ı örtük olarak scoped
gibi ele aldığı durumlardaki bu özniteliği eklersiniz.
-
this
örnek yöntemleri içinstruct
parametresi. -
ref
türlerine atıfta bulunanref struct
parametreler. -
out
Parametreler.
Öğe System.Diagnostics.CodeAnalysis.UnscopedRefAttribute uygulanarak kapsamsız olarak işaretlenir.
OverloadResolutionPriority
özniteliği
, OverloadResolutionPriorityAttribute iki aşırı yükleme belirsiz olduğunda kitaplık yazarlarının bir aşırı yüklemeyi diğerine tercih etmelerini sağlar. Birincil kullanım amacı, kitaplık yazarlarının mevcut kodu kesinti olmadan desteklerken daha iyi performans gösteren aşırı yüklemeler yazmasını sağlamaktır.
Örneğin, ReadOnlySpan<T> kullanan ve bellek ayırmalarını azaltmak için yeni bir aşırı yükleme ekleyebilirsiniz.
[OverloadResolutionPriority(1)]
public void M(params ReadOnlySpan<int> s) => Console.WriteLine("Span");
// Default overload resolution priority of 0
public void M(params int[] a) => Console.WriteLine("Array");
Aşırı yükleme çözümlemesi, iki yöntemin bazı bağımsız değişken türleri için eşit derecede iyi olduğunu dikkate alır. Bir int[]
bağımsız değişkeni için, ilk aşırı yüklemeyi tercih eder. Derleyicinin ReadOnlySpan
sürümünü tercih etmesini sağlamak için bu aşırı yüklemenin önceliğini artırabilirsiniz. Aşağıdaki örnekte özniteliği eklemenin etkisi gösterilmektedir:
var d = new OverloadExample();
int[] arr = [1, 2, 3];
d.M(1, 2, 3, 4); // Prints "Span"
d.M(arr); // Prints "Span" when PriorityAttribute is applied
d.M([1, 2, 3, 4]); // Prints "Span"
d.M(1, 2, 3, 4); // Prints "Span"
En yüksek aşırı yükleme önceliğine göre daha düşük önceliğe sahip tüm aşırı yüklemeler, geçerli yöntemler kümesinden kaldırılır. Bu özniteliği olmayan yöntemlerin aşırı yükleme önceliği varsayılan olarak sıfır olarak ayarlanmıştır. Kütüphane yazarları, yeni ve daha iyi bir yöntem aşırı yükleme eklerken son çare olarak bu özniteliği kullanmalıdır. Kitaplık yazarları, Aşırı yükleme çözümlemesinin daha iyi bir yöntem seçmeyi nasıl etkilediğini ayrıntılı olarak anlamalıdır. Aksi takdirde beklenmeyen hatalar oluşabilir.
EnumeratorCancellation özniteliği
System.Runtime.CompilerServices.EnumeratorCancellationAttribute özniteliği, System.Collections.Generic.IAsyncEnumerable<T>.GetAsyncEnumerator(CancellationToken) API'sinden iptal belirtecini alması gereken parametreyi belirtir. eşzamansız akışlar özelliğinin altyapısının bir parçasıdır.
CollectionBuilder özniteliği
System.Runtime.CompilerServices.CollectionBuilderAttribute özniteliği, birkoleksiyon ifadesinden koleksiyon türünün bir örneğini oluşturan bir yöntemi belirtir. Koleksiyonu oluşturan bir yöntem belirtmek için bu özniteliği kullanırsınız. Derleyici, bir koleksiyon ifadesi bu türe dönüştürüldüğünde bu yöntemi çağırmak için kod oluşturur.
InlineArray özniteliği
System.Runtime.CompilerServices.InlineArrayAttribute özniteliği, bir türü satır içi diziolarak işaretler. Bu özellik hakkında daha fazla bilgiyi structs
makalesinin satır içi dizilerbölümünde edinebilirsiniz.
IUnknownConstant ve IDispatchConstant öznitelikleri
System.Runtime.CompilerServices.IUnknownConstantAttribute ve System.Runtime.CompilerServices.IDispatchConstantAttribute öznitelikleri, new UnknownWrapper(null)
veya new DispatchWrapper(null)
olarak eksik bir bağımsız değişkenin sağlanması gerektiğini belirtmek için varsayılan parametrelere eklenebilir.