Przeglądając System.Linq.Enumerable
w DotPeek zauważam, że niektóre metody są doprawione [__DynamicallyInvokable]
atrybutem.
Jaką rolę odgrywa ten atrybut? Czy jest to coś dodanego przez DotPeek, czy też odgrywa inną rolę, być może informując kompilator o tym, jak najlepiej zoptymalizować metody?
c#
dynamic-invoke
Jamie Dixon
źródło
źródło
IReadOnlyCollection<T>
.System.ServiceModel v3
'sBasicHttpBinding.TextEncoding
(który w V4 przeniósł się do nowej klasy podstawowej i staje sięHttpBindingBase.TextEncoding
)Odpowiedzi:
Jest nieudokumentowany, ale wygląda na jedną z optymalizacji w .NET 4.5. Wygląda na to, że służy do wypełniania pamięci podręcznej informacji o typie refleksji, dzięki czemu kolejny kod refleksji na popularnych typach ram działa szybciej. Jest komentarz na ten temat w źródle referencyjnym właściwości System.Reflection.Assembly.cs, RuntimeAssembly.Flags:
Bez dalszych wskazówek, co może oznaczać „błogosławiony interfejs API”. Chociaż z kontekstu jasno wynika, że będzie to działać tylko na typach w samym frameworku. Powinien być gdzieś dodatkowy kod sprawdzający atrybut zastosowany do typów i metod. Nie mam pojęcia, gdzie to się znajduje, ale biorąc pod uwagę, że musiałby mieć widok wszystkich typów .NET, aby spróbować buforowania, mogę tylko myśleć o Ngen.exe.
źródło
System.ServiceModel 3.0
). Założyłem, żemscorlib
w grę wchodziły unifikacje a la referencje, ale i tak mam wiele do zrobienia w mojej konkretnej sprawie - i tak w odpowiednim czasie zgłosi i / lub usunie mylący ton do moich komentarzy ...System.ServiceModel v3
, ładujesz go w ramach automatycznych aktualizacji CLR4 doSystem.ServiceModel v4
. Zabawne jest to, że .NET 4.5 dokonuje aktualizacji na miejscu,System.ServiceModel
dodając nową klasę podstawową i przenosi właściwość na niższy poziom .Odkryłem, że jest on wykorzystywany w
Runtime*Info.IsNonW8PFrameworkAPI()
pakiecie metod wewnętrznych. Umieszczenie tego atrybutu na elemencie powoduje, że IsNonW8PFrameworkAPI () zwracafalse
go, a tym samym udostępnia element członkowski w aplikacjach WinRT i wyłączaThe API '...' cannot be used on the current platform.
wyjątek.Autorzy profili powinni umieszczać ten atrybut na elementach emitowanych przez ich profilera do zespołów szkieletu, jeśli chcą uzyskać do nich dostęp w WinRT.
źródło
RuntimeAssembly.InvocableAttributeCtorToken
, które są wywoływane przez wspomnianeIsNonW8PFrameworkAPI()
metody.