Aracılığıyla paylaş


Statik anonim işlevler

Not

Bu makale bir özellik belirtimidir. Belirtim, özelliğin tasarım belgesi olarak görev alır. Önerilen belirtim değişikliklerini ve özelliğin tasarımı ve geliştirilmesi sırasında gereken bilgileri içerir. Bu makaleler, önerilen belirtim değişiklikleri son haline getirilene ve geçerli ECMA belirtimine dahil edilene kadar yayımlanır.

Özellik belirtimi ile tamamlanan uygulama arasında bazı tutarsızlıklar olabilir. Bu farklılıklar, ilgili dil tasarım toplantısı (LDM) notlarında belirtilir.

Özellik belirtimlerini C# dil standardına benimseme işlemi hakkında daha fazla bilgi edinmek için belirtimleri makalesinde bulabilirsiniz.

Şampiyon sorunu: https://github.com/dotnet/csharplang/issues/275

Özet

Lambdalar ve anonim yöntemler üzerinde, yerellerin veya örnek durumunun kapsamlar tarafından yakalanmasını engelleyen bir 'statik' değiştiriciye izin verin.

Motivasyon

Öngörülemeyen şekilde yakalanan nesnelerin tutulmasına veya ek ayırmalara neden olabilecek kapsayıcı bağlamdan istemeden durumu yakalamaktan kaçının.

Ayrıntılı tasarım

Lambda veya anonim bir yönteme static değiştiricisi eklenebilir. static değiştirici, lambda veya anonim yönteminin statik anonim bir işlev olduğunu gösterir.

statik anonim işlev kapsayan kapsamdan durumu yakalayamaz. Sonuç olarak, kapsayan kapsamdan yerel öğeler, parametreler ve thisstatik anonim işleviçinde kullanılamaz.

statik anonim işlev, örtük veya açık bir this ya da base başvurusundan örnek üyelere başvuramaz.

statik anonim işlev kapsayan kapsamdan static üyelerine başvurabilir.

statik anonim işlev kapsayan kapsamdan constant tanımlara başvurabilir.

statik anonim işlevindekinameof(), kapsayan kapsamdan gelen yerel değişkenlere, parametrelere veya this ya da base'e başvurabilir.

Kapsayan kapsamdaki private üyeleri için erişilebilirlik kuralları, static vestatic olmayan anonim işlevler için aynıdır.

Meta verilerde statik anonim işlev tanımının static yöntemi olarak yayılıp yayılmayacağı konusunda bir garanti yoktur. Bu, en iyi duruma getirmek için derleyici uygulamasına bırakılır.

static olmayan bir yerel işlev veya anonim işlev, kapsayan statik anonim işlevden durumu yakalayabilir, ancak kapsayanstatik anonim işlevin dışında durum yakalayamaz.

Geçerli bir programdaki anonim bir işlevden static değiştiricinin kaldırılması, programın anlamını değiştirmez.