{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 变量共享"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用 .NET 交互式内核,可以在单个笔记本中以多种语言编写代码。为了利用每种语言的不同优势,您会发现在它们之间共享数据很有用。即一种语言的变量,可以在其它语言中使用。\n",
    "默认情况下,.NET Interactive 支持多种不同的语言,其中大多数语言都允许使用magic 命令`#!set` 和 `#!shared` 进行共享。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 各语言对变量共享的支持"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "| 语言          | 变量共享   |\n",
    "| ----          | ----      |\n",
    "| C#            |  支持     |\n",
    "| F#            |  支持     |\n",
    "| PowerShell    |  支持     |\n",
    "| JavaScript    |  支持     |\n",
    "| SQL           |  支持     |\n",
    "| KQL           |  支持     |\n",
    "| Python        |  支持     |\n",
    "| R             |  支持     |\n",
    "| HTML          | 不支持    |\n",
    "| Mermaid       | 不支持    |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 查看、管理全部变量方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![变量共享](./assets/images/shared.001.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 简单示例:C# 运行中的变量,被其它语言共享。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "//定义变量:存储网关\n",
    "string getway = \"192.168.1.1\";"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PowerShell 中使用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "dotnet_interactive": {
     "language": "pwsh"
    },
    "polyglot_notebook": {
     "kernelName": "pwsh"
    }
   },
   "outputs": [],
   "source": [
    "# Poweshell中使用 前面C#单元中定义的变量\n",
    "# 特别注意:因为PS中变量名必须以$开头,所以在命令中 name 参数名,在PS中使用时必须加$前辍\n",
    "\n",
    "#!set --value @csharp:getway --name gw\n",
    "\n",
    "Write-Host $gw\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## F# 中使用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "dotnet_interactive": {
     "language": "fsharp"
    },
    "polyglot_notebook": {
     "kernelName": "fsharp"
    }
   },
   "outputs": [],
   "source": [
    "#!set --value @csharp:getway --name getway\n",
    "\n",
    "Console.WriteLine(getway)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 在javascrip中使用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "dotnet_interactive": {
     "language": "javascript"
    },
    "polyglot_notebook": {
     "kernelName": "javascript"
    }
   },
   "outputs": [],
   "source": [
    "#!set --value @csharp:getway --name getway\n",
    "console.log(getway);\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".NET (C#)",
   "language": "C#",
   "name": ".net-csharp"
  },
  "language_info": {
   "name": "polyglot-notebook"
  },
  "orig_nbformat": 4,
  "polyglot_notebook": {
   "kernelInfo": {
    "defaultKernelName": "csharp",
    "items": [
     {
      "aliases": [],
      "name": "csharp"
     },
     {
      "aliases": [],
      "name": "razor"
     }
    ]
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}