Magento: обнаружение, если администратор вошел в веб-страницы

Некоторые дополнительные способы запуска с помощью кода ножниц. Предположим, что у вас есть класс, похожий на

public class Encoder() {
public void Markdown(IEnumerable<FooContent> contents) { do magic }
public void Markdown(IEnumerable<BarContent> contents) { do magic2 }
}

Предположим, что во время выполнения у вас есть FooContent

Если вы смогли привязать во время компиляции,

var fooContents = new List<FooContent>(fooContent)
new Encoder().Markdown(fooContents)

Однако вы не можете сделать это во время выполнения. Чтобы сделать это во время выполнения, выполните следующие строки:

var listType = typeof(List<>).MakeGenericType(myType);
var dynamicList = Activator.CreateInstance(listType);
((IList)dynamicList).Add(fooContent);

Чтобы динамически вызывать Markdown(IEnumerable<FooContent> contents)

new Encoder().Markdown( (dynamic) dynamicList)

Обратите внимание на использование функции dynamic в вызове метода , Во время выполнения dynamicList будет List<FooContent> (дополнительно также IEnumerable<FooContent>), так как даже использование динамика все еще связано с строго типизированным языком, связующее время будет выбирать соответствующий метод Markdown. Если нет точных совпадений по типу, он будет искать метод параметров объекта, и если ни одно из них не будет соответствовать исключению связующего из среды выполнения, будет предупреждено о том, что метод не соответствует.

Очевидным обратным отношением к этому подходу является огромный потеря безопасности типа во время компиляции. Тем не менее, код в этих строках позволит вам работать в очень динамичном смысле, что во время выполнения все еще полностью набирается, как вы ожидаете.

24
задан Community 23 May 2017 в 12:02
поделиться