2015-09-01 16 views
11

I recently, awaiter'u döndüren GetAwaiter yöntemine sahip herhangi bir nesnenin await -ed olabileceğini öğrendi. Bu, bir uzantı yöntemi olsa bile, temelde anlamında nesnesinin await yapılabilmesini sağlasa da doğrudur.Bir nesne çalışma zamanında olup olmadığını söylemek mümkün mü?

Ancak, bir nesne await -able ise çalışma zamanında anlatmanın bir yolu var mı? Normal yansıma çalışmaz, bir nesnenin uzantı yöntemlerini listelemediğinden.

Bu soruyu sorduğumda özel bir ihtiyacım yok, sadece mümkün olup olmadığını merak ediyorum.

+1

Hayır, çünkü her iki yöntem de derleyici tarafından yapılan ördek yazmayı kullanır. Yapabilseydin, bu bilgi ile ne yaparsın? –

+0

Uzatma yöntemlerini yansıma ile görememenizin bir nedeni var mı? Neden hazır olmadıklarını anlayabiliyorum, ama onları arayamaman için bir neden göremiyorum. – 31eee384

+1

@ 31eee384 kullanılabilir uzantıların kümesi, kaynak koddaki veya o anda yüklenmekte olan derlemeler kümesindeki kullanım ifadelerine bağlıdır. – usr

cevap

7

Bu karar vermek için C# derleyicinin kullandığı bilgilerden dolayı mümkün değildir.

Uzantı yöntemlerini çözümlemek için, içe aktarılan ad alanlarını bilmemiz gerekir. Bu bilgi çalışma zamanında mevcut değildir. Bu bir C# -only kavramdır. CLR, using'un ne olduğunu bilmiyor.

Bir nesnenin çalışma zamanında muhtemel olup olmadığını görmek için herhangi bir neden düşünemiyorum çünkü bu bilgiler üzerinde hareket edemiyorsunuz. Nesnenin bunun yerine Task olup olmadığını kontrol edebilir misiniz?

+0

[Bu yanıt] 'a göre (http://stackoverflow.com/a/299526/238419), çalışma zamanındaki uzatma yöntemlerini belirlemek mümkündür, bu da bu akıl yürütmeyi yanlış yapar. –

+0

@ BlueRaja-DannyPflughoeft 'Uzatma yönteminin tanımlanabileceği tüm montajlara bakmak zorundasınız. Bu mümkün değil çünkü derleme zamanında hangi meclislerin referans alındığını bilemezsiniz, ancak belki de kullanılmamış ve atılır. Ayrıca, yerinde olanları bilmiyorsunuz. Ayrıca, hiçbir yerde hiçbir zaman referans verilmeyen meclislerde tanımlanmış uzantılar olabilir. – usr

İlgili konular