Вам нужно было поискать исходный источник с помощью веб-сайта в настройках Microsoft, чтобы узнать больше информации о классе HttpRuntime
, в частности о свойстве Cache
. Если вы посмотрите на строку 2794 класса System.Web.HttpRuntime , вы увидите следующее определение свойства Cache
:
public static Cache Cache {
get {
...
}
}
Теперь, поскольку свойство static
, вы не можете использовать флаги привязки, которые вы используете, поскольку сейчас вы ищете NonPublic
член, который принадлежит Instance
. В .NET статические переменные не принадлежат экземпляру, поэтому опубликованный вами код приведет к возникновению исключения; он просто не может найти искомого члена, поскольку он не существует в предоставленном вами экземпляре - однако он существует в определении типа класса, в который вы просматриваете (HttpRuntime
).
Чтобы ваш код работал, вам нужно будет пропустить флаги привязки, теперь внутренний .NET-код, обрабатывающий ваш запрос, поймет, что мы пытаемся найти статический метод: HttpRuntime.Cache.GetType().GetMethod("Get")
. Примечание: если вы хотите иметь флаги привязки (читабельность, понимаемость), вы можете добавить: BindingFlags.Public | BindingFlags.Static
, что точно так же, как всякий раз, когда вы опускаете флаги.
Если вы хотите выполнить метод и получить результат (получите Cache
), вы можете вызвать MethodDefinition
, который вы только что получили от GetMethod
, используя Invoke(null, null)
.