Welcome to mirror list, hosted at ThFree Co, Russian Federation.

csharp.1 « man - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 430a160896890929ca709deef67a6085bdd83460 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.TH csharp 1 "22 March 2017"
.SH NAME 
csharp \- Interactive C# Shell and Scripting
.SH SYNOPSIS
.B csharp [--attach PID] [-e EXPRESSION] [file1 [file2]]
[compiler-options] [--|-s script-options]
.SH DESCRIPTION
The 
.I csharp
command is an interactive C# shell and scripting host that allows
the user to enter and evaluate C# statements and expressions from
the command line or execute C# scripts.
The regular
.I mcs
command line options can be used in this version of the compiler. 
.PP
Files specified in the command line will be loaded and executed as
scripts.
.PP
Starting with Mono 2.10, the 
.I csharp
command can be used as an interpreter executed by executables flagged
with the Unix execute attribute.   To do this, make the first line of
your C# source code look like this:
.PP
.nf
  #!/usr/bin/csharp
  Console.WriteLine ("Hello, World");
.fi
.PP
Starting with Mono 5.0, command line arguments may now be passed
to the
.I csharp
command by specifying either the
.I -s
or
.I --
(script) options.
.PP
The
.I -s
option is ideal for interpreting executable scripts that utilize
shebang syntax (introduced in Mono 2.10). This allows command line
arguments to be passed to and consumed cleanly by the script:
.PP
.nf
  #!/usr/bin/csharp -s
  foreach (var arg in Args)
    Console.WriteLine ($"script argument: {arg}");
.fi
.SH OPTIONS
The commands accept all of the commands that are available to the 
.I mcs
command, so you can reference assemblies, specify paths, language
level and so on from the command line.   In addition, the following
command line options are supported:
.TP
.I "\-s" SCRIPT_FILE
This option is ideal for authoring executable scripts that utilize
the Unix shebang feature. Unix will implicitly append as an argument
the path of the script to execute. When the executable is invoked,
any arguments then passed to it will be available in the
.I Args
global. Example:
.I "#!/usr/bin/env csharp -s"
.TP
.I "\-\-"
Any arguments that follow will not be passed to the compiler driver,
and instead will be made available in the
.I Args
global. Example:
.I csharp -- a b c
will result in Args = { "a", "b", "c" } in the interactive shell.
.TP 
.I "\-\-attach"
This is an advanced option and should only be used if you have a deep
understanding of multi-threading.     This option is availble on the 
.I csharp
command and allows the compiler to be injected into other processes.
This is done by injecting the C# shell in a separate thread that runs
concurrently with your application.  This means that you must take
special measures to avoid crashing the target application while using
it.  For example, you might have to take the proper locks before
issuing any commands that might affect the target process state, or
sending commands through a method dispatcher.     
.TP 
.I "\-e" EXPRESSION
This will evaluate the specified C# EXPRESSION and exit
.SH OPERATION
Once you launch the csharp command, you will be greeted with the
interactive prompt:
.PP
.nf
$ csharp
Mono C# Shell, type "help;" for help
 
Enter statements below.
csharp>
.fi
.PP
A number of namespaces are pre-defined with C# these include System,
System.Linq, System.Collections and System.Collections.Generic.
Unlike the compiled mode, it is possible to add new using statements
as you type code, for example:
.PP
.nf
csharp> new XmlDocument ();
<interactive>(1,6): error CS0246: The type or namespace name `XmlDocument' could not be found. Are you missing a using directive or an assembly reference?
csharp> using System.Xml;
csharp> new XmlDocument (); 
System.Xml.XmlDocument
.fi
.PP
Every time a command is typed, the scope of that command is one of a
class that derives from the class Mono.CSharp.InteractiveBase.   This
class defines a number of static properties and methods.   To display
a list of available commands access the `help' property:
.nf
csharp> help;
"Static methods:
  LoadPackage (pkg); - Loads the given Package (like -pkg:FILE)
  [...]
  ShowVars ();       - Shows defined local variables.
  ShowUsing ();      - Show active using decltions.
  help;
"
csharp>
.fi
.PP
When expressions are entered, the C# shell will display the result of
executing the expression:
.PP
.nf
csharp> Math.Sin (Math.PI/4); 
0.707106781186547
csharp> 1+1;
2
csharp> "Hello, world".IndexOf (',');
5
.fi
.PP
The C# shell uses the ToString() method on the returned object to
display the object, this sometimes can be limiting since objects that
do not override the ToString() method will get the default behavior
from System.Object which is merely to display their type name:
.PP
.nf
csharp> var a = new XmlDocument ();
csharp> a;
System.Xml.Document
csharp> csharp> a.Name;    
"#document"
csharp>
.fi
.PP
A few datatypes are handled specially by the C# interactive shell like
arrays, System.Collections.Hashtable, objects that implement
System.Collections.IEnumerable and IDictionary and are rendered
specially instead of just using ToString ():
.PP
.nf
csharp> var pages = new Hashtable () { 
      >  { "Mono",    "http://www.mono-project.com/" },
      >  { "Linux",   "http://kernel.org" } };
csharp> pages;
{{ "Mono", "http://www.mono-project.com/" }, { "Linux", "http://kernel.org" }}
.fi
.PP
It is possible to use LINQ directly in the C# interactive shell since
the System.Linq namespace has been imported at startup.   The
following sample gets a list of all the files that have not been
accessed in a week from /tmp:
.PP
.nf
csharp> using System.IO;
csharp> var last_week = DateTime.Now - TimeSpan.FromDays (7);
csharp> var old_files = from f in Directory.GetFiles ("/tmp") 
      >   let fi = new FileInfo (f) 
      >   where fi.LastAccessTime < LastWeek select f;
csharp>
.fi
.PP
You can of course print the results in a single statement as well:
.PP
.nf
csharp> using System.IO;
csharp> var last_week = DateTime.Now - TimeSpan.FromDays (7);
csharp> from f in Directory.GetFiles ("/tmp") 
      >   let fi = new FileInfo (f) 
      >   where fi.LastAccessTime < last_week select f;
[...]
csharp>
.fi
.PP
LINQ and its functional foundation produce on-demand code for
IEnumerable return values.  For instance, the return value from a
using `from' is an IEnumerable that is evaluated on demand.   The
automatic rendering of IEnumerables on the command line will trigger
the IEnumerable pipeline to execute at that point instead of having
its execution delayed until a later point.
.PP
If you want to avoid having the IEnumerable rendered at this point,
simply assign the value to a variable.
.PP
Unlike compiled C#, the type of a variable can be changed if a new
declaration is entered, for example:
.PP
.nf
csharp> var a = 1;
csharp> a.GetType ();
System.Int32
csharp> var a = "Hello";
csharp> a.GetType ();
System.String
csharp> ShowVars ();
string a = "Hello"
.fi
.PP
In the case that an expression or a statement is not completed in a
single line, a continuation prompt is displayed, for example:
.PP
.nf
csharp> var protocols = new string [] {
      >    "ftp",
      >    "http",
      >    "gopher" 
      > };
csharp> protocols;
{ "ftp", "http", "gopher" }
.fi
.PP
Long running computations can be interrupted by using the Control-C
sequence:
.PP
.nf
csharp> var done = false;
csharp> while (!done) { }
Interrupted!
System.Threading.ThreadAbortException: Thread was being aborted
  at Class1.Host (System.Object& $retval) [0x00000] 
  at Mono.CSharp.InteractiveShell.ExecuteBlock (Mono.CSharp.Class host, Mono.CSharp.Undo undo) [0x00000] 
csharp>
.fi
.PP
.SH INTERACTIVE EDITING
The C# interactive shell contains a line-editor that provides a more
advanced command line editing functionality than the operating system
provides.   These are available in the command line version, the GUI
versions uses the standard Gtk# key bindings.
.PP
The command set is similar to many other applications (cursor keys)
and incorporates some of the Emacs commands for editing as well as a
history mechanism too.
.PP
.PP
The following keyboard input is supported:
.TP 
.I Home Key, Control-a
Goes to the beginning of the line.
.TP 
.I End Key, Control-e
Goes to the end of the line.
.TP 
.I Left Arrow Key, Control-b
Moves the cursor back one character.
.TP 
.I Right Arrow Key, Control-f
Moves the cursor forward one character.
.TP
.I Up Arrow Key, Control-p
Goes back in the history, replaces the current line with the previous
line in the history.
.TP
.I Down Arrow Key, Control-n
Moves forward in the history, replaces the current line with the next
line in the history.
.TP
.I Return
Executes the current line if the statement or expression is complete,
or waits for further input.
.TP 
.I Control-C
Cancel the current line being edited.  This will kill any currently
in-progress edits or partial editing and go back to a toplevel
definition.
.TP
.I Backspace Key
Deletes the character before the cursor
.TP
.I Delete Key, Control-d
Deletes the character at the current cursor position.
.TP
.I Control-k
Erases the contents of the line until the end of the line and places
the result in the cut and paste buffer. 
.TP
.I Alt-D
Deletes the word starting at the cursor position and appends into the
cut and paste buffer.    By pressing Alt-d repeatedly, multiple words
can be appended into the paste buffer. 
.TP
.I Control-Y
Pastes the content of the kill buffer at the current cursor position. 
.TP
.I Control-Q
This is the quote character.   It allows the user to enter
control-characters that are otherwise taken by the command editing
facility.   Press Control-Q followed by the character you want to
insert, and it will be inserted verbatim into the command line. 
.TP
.I Control-D
Terminates the program.   This terminates the input for the program.
.SH STATIC PROPERTIES AND METHODS
Since the methods and properties of the base class from where the
statements and expressions are executed are static, they can be
invoked directly from the shell.   These are the available properties
and methods:
.TP
.I Args
An easy to consume array of any arguments specified after either
.I -s
or
.I --
on the command line. Ideal for self-executing scripts utilizing the
.I -s
option.
.TP
.I void LoadAssembly(string assembly)
Loads the given assembly.   This is equivalent to passing the compiler
the -r: flag with the specified string. 
.TP
.I void LoadPackage(string package)
Imports the package specified.   This is equivalent to invoking the
compiler with the -pkg: flag with the specified string.
.TP
.I string Prompt { get; set } 
The prompt used by the shell.  It defaults to the value "csharp> ".
.I string ContinuationPrompt { get; set; } 
The prompt used by the shell when further input is required to
complete the expression or statement. 
.TP 
.I void ShowVars()
Displays all the variables that have been defined so far and their
types.    In the csharp shell declaring new variables will shadow
previous variable declarations, this is different than C# when
compiled.   
.I void ShowUsing()
Displays all the using statements in effect.
.I TimeSpan Time (Action a)
Handy routine to time the time that some code takes to execute.   The
parameter is an Action delegate, and the return value is a TimeSpan.
For example:
.PP
.nf
csharp> Time (() => { for (int i = 0; i < 5; i++) Console.WriteLine (i);});
0
1
2
3
4
00:00:00.0043230
csharp>
.fi
.PP
The return value is a TimeSpan, that you can store in a variable for
benchmarking purposes. 
.SH GUI METHODS AND PROPERTIES
In addition to the methods and properties available in the console
version there are a handful of extra properties available on the GUI
version.   For example a "PaneContainer" Gtk.Container is exposed that
you can use to host Gtk# widgets while prototyping or the "MainWindow"
property that gives you access to the current toplevel window. 
.SH STARTUP FILES
The C# shell will load all the Mono assemblies and C# script files
located in the ~/.config/csharp directory on Unix.  The assemblies are
loaded before the source files are loaded. 
.PP
C# script files are files
that have the extension .cs and they should only contain statements
and expressions, they can not contain full class definitions (at least
not as of Mono 2.0).  Full class definitions should be compiled into
dlls and stored in that directory.
.SH AUTHORS
The Mono C# Compiler was written by Miguel de Icaza, Ravi Pratap,
Martin Baulig, Marek Safar and Raja Harinath.  The development was
funded by Ximian, Novell and Marek Safar.
.SH LICENSE
The Mono Compiler Suite is released under the terms of the GNU GPL or
the MIT X11.  Please read the accompanying `COPYING' file for details.
Alternative licensing for the compiler is available from Novell.
.SH SEE ALSO
gmcs(1), mcs(1), mdb(1), mono(1), pkg-config(1)
.SH BUGS
To report bugs in the compiler, you must file them on our bug tracking
system, at:
http://www.mono-project.com/community/bugs/
.SH MAILING LIST
The Mono Mailing lists are listed at http://www.mono-project.com/community/help/mailing-lists/
.SH MORE INFORMATION
The Mono C# compiler was developed by Novell, Inc
(http://www.novell.com, http) and is based on the
ECMA C# language standard available here:
http://www.ecma.ch/ecma1/STAND/ecma-334.htm
.PP
The home page for the Mono C# compiler is at
http://www.mono-project.com/docs/about-mono/languages/csharp/ information about the
interactive mode for C# is available in http://mono-project.com/docs/tools+libraries/tools/repl/