这是命令 csharp,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
csharp, gsharp - 交互式 C# Shell
概要
尖锐的 [ - 附 PID] [-e 表达] [文件1 [文件 2]] [选项]
夏普 [文件1 [文件 2]]
商品描述
- 尖锐的 是一个交互式 C# shell,允许用户输入和评估 C#
来自命令行的语句和表达式。 常规的 MCS 命令行选项
可以在这个版本的编译器中使用。
- 夏普 command 是 C# 解释器的 GUI 版本,它使用 Gtk# 并提供
区域也可以附加小部件。 此版本可以附加到其他 Gtk#
以安全的方式将应用程序注入到 Gtk# 应用程序的主循环中,
避免将自身注入到多线程中的任何问题
目标进程。
命令行中指定的文件将作为脚本加载和执行。
从 Mono 2.10 开始, 尖锐的 命令可以用作解释器执行
用 Unix 执行属性标记的可执行文件。 为此,请制作第一行
您的 C# 源代码如下所示:
“#!/usr/bin/csharp”
Console.WriteLine("你好,世界");
配置
这些命令接受所有可用的命令 MCS 命令,所以你可以
引用程序集,从命令行指定路径、语言级别等。 在
此外,还支持以下命令行选项:
- 附
这是一个高级选项,只有在您有深刻理解的情况下才应该使用
的多线程。 此选项可在 尖锐的 命令并允许
编译器被注入到其他进程中。 这是通过注入 C# 来完成的
shell 在与您的应用程序同时运行的单独线程中。 这个
意味着您必须采取特殊措施来避免目标应用程序崩溃
在使用它的同时。 例如,您可能必须在之前采取适当的锁
发出任何可能影响目标进程状态的命令,或发送
命令通过方法调度程序。
-e 表达
这将评估指定的 C# EXPRESSION 并退出
项目运营
启动 csharp 命令后,您将看到交互式提示:
$ 夏普
Mono C# Shell,输入“帮助”; 求助
在下面输入语句。
csharp>
许多命名空间是用 C# 预定义的,包括 System、System.Linq、
System.Collections 和 System.Collections.Generic。 与编译模式不同,它是
可以在键入代码时添加新的 using 语句,例如:
csharp> 新建 XmlDocument();
(1,6): 错误 CS0246: 找不到类型或命名空间名称“XmlDocument”。 您是否缺少 using 指令或程序集引用?
csharp> 使用 System.Xml;
csharp> 新建 XmlDocument();
系统.Xml.XmlDocument
每次键入命令时,该命令的范围是派生类之一
来自类 Mono.CSharp.InteractiveBase。 这个类定义了一些静态的
属性和方法。 要显示可用命令列表,请访问“帮助”
属性:
csharp> 帮助;
"静态方法:
负载包 (pkg); - 加载给定的包(如 -pkg:FILE)
[...]
ShowVars(); - 显示定义的局部变量。
显示使用(); - 使用 decltions 显示活动。
救命;
"
csharp>
当输入表达式时,C# shell 将显示执行结果
表达:
csharp> Math.Sin (Math.PI/4);
0.707106781186547
csharp> 1+1;
2
csharp> "Hello, world".IndexOf(',');
5
C# shell 在返回的对象上使用 ToString() 方法来显示对象,这个
有时可能会受到限制,因为不覆盖 ToString() 方法的对象将
从 System.Object 获取默认行为,这只是为了显示它们的类型名称:
csharp> var a = new XmlDocument();
csharp> a;
系统文件
csharp> csharp> a.Name;
“#文档”
csharp>
一些数据类型由 C# 交互式 shell 专门处理,如数组,
System.Collections.Hashtable,实现 System.Collections.IEnumerable 的对象和
IDictionary 和特别呈现,而不是仅仅使用 ToString():
csharp> var pages = new Hashtable() {
> { "单声道", "http://www.mono-project.com/" },
> { "Linux", "http://kernel.org" } };
csharp> 页面;
{{ “单核细胞增多症”, ”http://www.mono-project.com/" }, { "Linux", "http://kernel.org" }}
可以直接在 C# 交互式 shell 中使用 LINQ,因为 System.Linq
命名空间已在启动时导入。 以下示例获取所有
一周内未访问的文件 / tmp目录:
csharp> 使用 System.IO;
csharp> var last_week = DateTime.Now - TimeSpan.FromDays (7);
csharp> var old_files = from f in Directory.GetFiles ("/ tmp目录")
> 让 fi = 新文件信息 (f)
> where fi.LastAccessTime < LastWeek select f;
csharp>
您当然也可以在单个语句中打印结果:
csharp> 使用 System.IO;
csharp> var last_week = DateTime.Now - TimeSpan.FromDays (7);
csharp> from f in Directory.GetFiles ("/ tmp目录")
> 让 fi = 新文件信息 (f)
> where fi.LastAccessTime < last_week select f;
[...]
csharp>
LINQ 及其功能基础为 IEnumerable 返回值生成按需代码。
例如,使用 `from' 的返回值是一个 IEnumerable,它在
要求。 命令行自动渲染 IEnumerables 会触发
IEnumerable 管道在该点执行而不是延迟执行
直到稍后。
如果您想避免此时呈现 IEnumerable,只需分配
变量的值。
与编译后的 C# 不同,如果输入新的声明,则可以更改变量的类型,
例如:
csharp> var a = 1;
csharp> a.GetType();
系统.Int32
csharp> var a = "你好";
csharp> a.GetType();
系统字符串
csharp> ShowVars();
字符串 a = "你好"
如果表达式或语句不是在一行中完成,则
显示继续提示,例如:
csharp> var 协议 = 新字符串 [] {
> "ftp",
> "http",
> “地鼠”
> };
csharp> 协议;
{ "ftp", "http", "gopher" }
可以使用 Control-C 序列中断长时间运行的计算:
csharp> var done = false;
csharp> while (!done) { }
中断!
System.Threading.ThreadAbortException: 线程被中止
在 Class1.Host (System.Object& $retval) [0x00000]
在 Mono.CSharp.InteractiveShell.ExecuteBlock (Mono.CSharp.Class 主机,Mono.CSharp.Undo undo) [0x00000]
csharp>
互动 编辑
C# 交互式 shell 包含一个行编辑器,可提供更高级的命令行
操作系统提供的编辑功能。 这些可以在
命令行版本,GUI 版本使用标准 Gtk# 键绑定。
命令集类似于许多其他应用程序(光标键),并包含一些
用于编辑的 Emacs 命令以及历史记录机制
支持以下键盘输入:
主页 键, 控制-a
转到行的开头。
结束 键, 控制-e
转到行尾。
左 箭头 键, 控制-b
将光标向后移动一个字符。
右 箭头 键, 控制-f
将光标向前移动一个字符。
Up 箭头 键, 控制-p
返回历史记录,将当前行替换为历史记录中的前一行
历史。
Down 箭头 键, 控制-n
在历史中向前移动,用下一个留置权替换当前行
历史。
回程 如果语句或表达式完成,则执行当前行,或等待
进一步输入。
控制-C
取消当前正在编辑的行。 这将杀死任何当前正在进行的
编辑或部分编辑并返回到顶层定义。
Backspace键 主要
删除光标前的字符
删除 键, 控制-d
删除当前光标位置的字符。
控制-k
擦除行的内容直到行尾,并将结果放入
剪切和粘贴缓冲区。
Alt-D 删除从光标位置开始的单词并附加到剪切和粘贴中
缓冲。 通过反复按 Alt-d,可以将多个单词附加到
粘贴缓冲区。
控制-Y
在当前光标位置粘贴终止缓冲区的内容。
控制-Q
这是引号字符。 它允许用户输入控制字符
否则由命令编辑工具获取。 按 Control-Q 然后按
您要插入的字符,它将被逐字插入命令中
线。
控制-D
终止程序。 这将终止程序的输入。
静态的 性能 AND 方法
由于基类的方法和属性来自 where 语句和
表达式是静态执行的,它们可以直接从 shell 调用。 这些
是可用的属性和方法:
无效 LoadAssembly(字符串 集会)
加载给定的程序集。 这相当于向编译器传递 -r: 标志
与指定的字符串。
无效 加载包(字符串 包)
导入指定的包。 这相当于调用编译器
-pkg: 带有指定字符串的标志。
绳子 提示 { 得到; 集 }
shell 使用的提示。 它默认为值“csharp>”。 绳子
继续提示 { 得到; 放; } 进一步输入时shell使用的提示是
需要完成表达式或语句。
无效 显示变量()
显示迄今为止定义的所有变量及其类型。 在里面
声明新变量的 csharp shell 将隐藏以前的变量声明,
这与编译时的 C# 不同。 无效 显示使用() 显示所有使用
声明生效。 时间跨度 时间 (行动 a) 方便的例程来计时
一些代码需要执行。 参数是一个Action委托,返回
值是一个时间跨度。 例如:
csharp> Time (() => { for (int i = 0; i < 5; i++) Console.WriteLine (i);});
0
1
2
3
4
00:00:00.0043230
csharp>
返回值是一个 TimeSpan,您可以将其存储在一个变量中以进行基准测试
的目的。
GUI 方法 AND 性能
除了控制台版本中可用的方法和属性之外,还有
GUI 版本中提供了一些额外的属性。 例如“PaneContainer”
Gtk.Container 是公开的,您可以在原型设计或
“MainWindow”属性,可让您访问当前顶级窗口。
STARTUP FILES
C# shell 将加载位于
〜/.config/csharp Unix 上的目录。 在源文件加载之前加载程序集
已加载。
C# 脚本文件是扩展名为 .cs 的文件,它们应该只包含
语句和表达式,它们不能包含完整的类定义(至少不能像
Mono 2.0)。 完整的类定义应该编译成 dll 并存储在那个
目录。
作者
Mono C# 编译器由 Miguel de Icaza、Ravi Pratap、Martin Baulig、Marek 编写
萨法尔 (Safar) 和王侯 (Raja Harinath)。 该开发项目由 Ximian、Novell 和 Marek Safar 资助。
使用 onworks.net 服务在线使用 csharp