здесь находится фрагмент кода из углового js
var requestAnimationFrame = $window.requestAnimationFrame ||
$window.webkitRequestAnimationFrame ||
$window.mozRequestAnimationFrame;
var rafSupported = !!requestAnimationFrame;
, и они намерены установить rafSupported в true или false на основе доступности функции в requestAnimationFrame
, это может быть достигается путем проверки следующим образом:
if(typeof requestAnimationFrame === 'function')
rafSupported =true;
else
rafSupported =false;
может использоваться короткий путь !!
rafSupported = !!requestAnimationFrame ;
, поэтому, если requestAnimationFrame была назначена функция, тогда! requestAnimationFrame будет ложным и еще один! из этого было бы правдой
, если requestAnimationFrame было объявлено undefined, тогда! requestAnimationFrame будет правдой и еще одним! это было бы неверно
Ничего особенного. Попробуйте создать новую библиотеку классов с именем "Animal"
и добавьте следующий код:
namespace Animal
{
public class Dog
{
public string Bark()
{
return "Woof!";
}
}
}
Постройте проект (для создания .dll). Вы можете найти .dll в <projectLocation>\bin\<Release|Debug>
.
Теперь откройте PowerShell и введите этот код:
Add-Type -Path "C:\...\Projects\Animal\Animal\bin\Debug\Animal.dll"
$dog = [Animal.Dog]::new()
$dog.Bark()
Выход
Другой альтернативой является создание полноценного модуля PowerShell. Вот быстрый способ сделать это:
Microsoft.PowerShell.5.ReferenceAssemblies
Класс My Greeting:
public class GreetingClass
{
public string Greeting { get; set; }
public string ToWhom { get; set; }
}
System.Management.Automation.Cmdlet
и поставляется с несколькими атрибутами PowerShell: [ 1128] Вот мое:
[Cmdlet(VerbsCommon.New, "Greeting")]
[OutputType(typeof(GreetingClass))]
public class NewGreeting : Cmdlet
{
[Parameter(Mandatory = true)]
public string Greeting { get; set; }
[Parameter]
[Alias("Who")]
public string ToWhom { get; set; } = "World";
protected override void ProcessRecord()
{
base.ProcessRecord();
WriteVerbose("Creating and returning the Greeting Object");
var greeting = new GreetingClass {Greeting = Greeting, ToWhom = ToWhom};
WriteObject(greeting);
}
}
Debug
и установите: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-noprofile -noexit -command "import-module .\yourProjectName.dll
Теперь нажмите F5
. Появится консоль PowerShell. Поскольку вы импортировали свой модуль, командлет New-Greeting
загружен. Итак, все это работает:
PS C:\> New-Greeting -Greeting "hello there" -ToWhom World
, что приводит к:
Greeting ToWhom
-------- ------
hello there World
Но ваш командлет является полноценным командлетом PowerShell, поэтому он может попасть в конвейер. Это:
PS C:\> New-Greeting -Greeting "What's new" -ToWhom Pussycat | Format-List
приведет к:
Greeting : What's new
ToWhom : Pussycat
Поскольку вы запускаете сеанс PowerShell, когда нажимаете F5
и загружаете свой модуль, вы можете установить точки останова в своем коде, одношаговый и т. д. в отладчике.
Вы получаете все обычное совершенство PowerShell. Вы можете использовать -Who
как псевдоним для -ToWhom
. Параметр -Greeting
описывается как обязательный, поэтому, если вы его забудете, консоль предложит вам.
Вы также можете предоставлять методы в своем классе POCO. Например, если вы добавите этот метод в GreetingClass
:
public void SayHello()
{
Console.WriteLine($"{Greeting} {ToWhom}");
}
Вы можете сделать это в PowerShell:
PS C:\> $greet = New-Greeting -Greeting Hello -Who World
PS C:\> $greet.SayHello()
и получить в результате:
[ 118]Я многому научился из этого: https://www.red-gate.com/simple-talk/dotnet/net-development/using-c-to-create-powershell-cmdlets- the-basics /
Вы автоматически получаете базовую помощь Get-Help
из PowerShell, но если вы будете следовать демонстрациям Red-Gate (по ссылке выше), вы узнаете, как разбогатеть Get-Help
Справка из стандартных комментариев C # XML (из пакета XmlDoc2CmdletDoc
NuGet).