Странно странное интерфейсное использование полиморфизма соединяет интерфейсом с составом

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

Если вместо этого вы хотите узнать, в каком NSG находится виртуальная машина, вам нужна другая команда. NSG - это ресурс, который подключается к ВМ или NIC и действует как брандмауэр. Если вы хотите этого, то вам нужно выполнить:

$nsg =  $nic | select-object -ExpandProperty NetworkSecurityGroup

Однако, это только приведет к тому, что вы примените NSG к ВМ, вы также можете применить их на уровне ВМ, чтобы вы лучше работали эта команда:

$effectiveRules=Get-AzureRmEffectiveNetworkSecurityGroup -NetworkInterfaceName <nicName> -ResourceGroupName <resourceGroup>
$effectiveRules.NetworSecurityGroup

В этом списке перечислены все NSG, примененные на уровне NIC или подсети.

5
задан Drew Noakes 13 February 2009 в 07:27
поделиться

2 ответа

Нет абсолютно ничего неправильно с этим кодом (если это не сбивает с толку Ваших пользователей), и это не шаблон ни с каким именем, с которым я знаком. CanDoThisAndThat реализации два интерфейса, таким образом, клиенты могут использовать его в так или иначе.

.NET позволяет интерфейсам быть реализованными этот путь - известный как явная интерфейсная реализация.

Явная интерфейсная реализация полезна когда:

  1. Два интерфейса имеют то же членское определение
  2. Вы должны реализовать интерфейс, но не хотите предавать гласности это, конкретный участник доступен клиентскому коду, который не объявил ссылку с помощью интерфейсного типа

Пример случая 2 от платформы.NET ICollection.SyncLock. List<T> реализации ICollection все же следующий код не скомпилирует, потому что участник намеренно был 'скрыт', поскольку разработчики BCL больше не рекомендуют блокировать наборы таким образом:

List<object> list = new List<object>();

lock (list.SyncRoot) // compiler fails here
{
    // ...
}

Любой унаследованный код этого формата будет все еще работать, потому что ссылка имеет тип ICollection явно:

ICollection list = new List<object>();

lock (list.SyncRoot) // no problem
{
    // ...
}
5
ответ дан 14 December 2019 в 01:19
поделиться

Каждый тип имеет отображение интерфейса (который может быть получен с Типом. GetInterfaceMap, если Вы хотите посмотреть на него с отражением). Это в основном говорит, "Когда метод X в интерфейсе Y вызывается, этот метод Z является тем для вызова". Обратите внимание, что даже при том, что это не поддерживается в C#, это возможно для отображающегося целевого метода иметь другое имя с имени метода интерфейса! (VB явно поддерживает это, я верю.)

В Вашем случае у Вас есть три метода, и каждый из этих трех методов соответствует методу в одном из включенных интерфейсов.

Когда компилятор издает приказ к виртуальному методу через интерфейс, сгенерированный IL говорит что-то как "вызов IFoo. Панель на этом объекте" - и IFoo. Панель затем разрешена с помощью интерфейсной карты.

Вы, возможно, иногда должны использовать его, если у или Вас есть подписи, которые отличаются только в ответ тип, или если Вы реализуете два неоднородных интерфейса, которые, оказывается, имеют те же имена методов, но должны сделать разные вещи. Везде, где можно избежать его, хотя, сделайте! Это делает для очень запутывающего кода.

4
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: