Transcript Document
Introduction to C#
• With a GIS focus
• With Python examples to help with transition
• Provide a C# foundation for ArcGIS
customization with ArcObjects
Why customize ArcGIS ? Workflow.
ArcGIS application like ArcMap does not do
EXACTLY what you want to do “out-of-the-box”.
ArcObjects provides the programming
framework customize ArGIS applications to do
exactly what you want.
Extending ArcGIS
Add-ins, C#, & ArcObjects
• Adding toolbars, buttons, tools, etc.
• ArcGIS 10.1+ provides tools for making Python
Add-ins ArcGIS 10.0 did not (Free webinar)
• ArcObjects SDK for the Microsoft .NET
Framework provides access to more than
Python
Customization example
Capture point features at midpoint of drawn line automatically calculating
and storing line orientation and providing easy tools for selecting type and
adding dip angle.
ESRI Customization Examples
• 200+ ESRI examples in Samples folder
i.e. C:\Program Files\ArcGIS\DeveloperKit10.2\Samples\ArcObjectsNet
From Python to C#
•
•
•
•
•
•
•
•
•
•
•
IDE Solutions, Projects
Runtime environment
Code containers
Core language and framework
Types
Variables, operators, expressions, statements
Functions
Scope
Booleans
Flow control – branching and looping
Standard modules and libraries
IDE Projects
PyScripter psproj
• One or more related files
referenced by psproj file
Project is optional
Visual Studio sln and csproj
• Solution (sln) can contain
one or more Projects
(csproj) and other files
• Project contains one or
more related files
Solution/Project(s) not optional
Visual Studio IDE
Creating .NET Solution and Projects
with Visual Studio 2010
Projects …
… because any application worth building
usually has more than one .cs file and other files
(e.g. images, cursors, etc.)
Solutions …
… because Projects must be part of a Solution
Visual Studio Solution (.sln)
*
Projects (.csproj)
10/50
Folder structure for application
development
Download …
Creating a src folder
- Create a New Project … Blank Solution,
in src
- Save
- Exit Visual Studio
- Move files up one level into src
- Delete solution folder
Solutions can include code from other CLS languages
12/50(e.g. VB.NET)
Adding a Project to a Solution
13/50
ProjectEXEtemplates
EXE
DLL
ESRI Add-ins and Extensions
are compiled into DLL’s
Most common Project templates
Sln and Project code
StartUp Project
• StartUp Project is the first project
to run when the application is run
• Class Library Projects cannot be
set as the StartUp Project
Runtime requirements
Python
• PY file run from command
line or double click
• Can be run interactively
>>> x = 1
• Requires Python interpreter
(Python.exe) to run
• Requires appropriate
version of Python.exe
C#
• EXE run from command line
or double click
• Cannot be run interactively
No >>> here.
• Compiled assembly (EXE)
can be run directly
• Requires .NET Framework
that can support assembly
Runtime – from code to CPU
Python
• Python file run at command
line or double-clicked
• Interpreted by Python.exe
into byte code
• Byte code transformed into
machine language by
Python runtime
• CPU runs machine language
program
C#
• Code files in Visual Studio
Solution/Project(s)
compiled to Common
Intermediate Language (CIL)
Assembly (EXE)
• EXE run from command line
or double-clicked
• Common Language Runtime
(CLR) transforms CIL into
machine language
• CLR and CPU run program
.NET Framework Overview
CLS specifes rules .NET
languages must follow to create
.NET code that will reference the
.NET Framework Class Libraries
(.NET DLL Assemblies) and
.NET CTS.
CLS
(Common Language Specification)
C#, VB.NET, Managed C++, J#
Framework Class Libraries
UI
Services
Data Access
Web Form
WinForm
WPF
WCF
WorkFlow
ADO.NET
Entity Framwork
LINQ to SQL
Framework Base Classes & CTS (Common Type System)
IO, Collections, Security, Threading, etc.
.NET compilers will compile
.NET code into CIL stored in
.NET assemblies (EXE or DLL)
.NET CLR will perform JIT
(Just-In-Time compilation) to
native machine code and ensure
that the .NET assembly runs
properly and securely.
Compilers
CIL (Common Intermediate Language)
CLR (Common Language Runtime)
Windows OS
19/50
Win32, IIS, MSMQ
Statements
• Code is interpreted or compiled one
statement at a time
• A statement can be composed of one or more
expressions
• Expressions are composed of one or more of
the following: variables, operators, literals,
function calls, and types
Statements
Python
• No end of statement marker
• Indentation is critical
C#
• ; marks end of statement
• Indentation is cosmetic
msg = “Multi-line statement \
needs line continuation char”
msg = “Multi-line statement
does not need continuation
char”;
Statement context
Python
Statements can be run
outside of functions
C#
Statements cannot be run
outside of functions
1 keyword
1 literal
Solution
Project
Namespace
Class
Method
4 keywords
4 names
1 literal
1
Statement
4
Keywords
Python
• ~30
C#
• ~80
Types
Python
• str
C#
• string, char
• int
• sbyte, byte, short, ushort,
int, uint, long, ulong
• float
• float, double, decimal
• bool (True or False)
• bool (true or false)
C# Types – Value types
true, false
0 – 255
‘a’, ‘b’, ‘c’, ‘\t’, etc.
28-29 significant digits, ± 7.9 x 1028
15-16 significant digits, ± 5.0 x 10324 to ±1.7 x 10308
List of constants of same type - byte, sbyte, short, ushort, int, uint, long, or ulong
7 significant digits, ±3.4 x 1038
-2,147,483,648 to 2,147,483,647
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
-128 to 127
-32,768 to 32,767
Group of related value types
0 to 4,294,967,295
0 to 18,446,744,073,709,551,615
0 to 65,535
C# Types – Reference types
Value types require a static amount of memory
(e.g. byte requires 1 byte, int uses 4 bytes, etc.)
and directly contain their data.
Reference types require dynamic amounts of
memory (e.g. “Bob” and “Bobby”).
Stack memory
Stores values of value types and memory
location of reference types in Heap Memory
Heap memory
Stores reference types
Most commonly used types
string
int
double
bool
char
Classes
Python
Syntax:
C#
Syntax:
class name([baseClass]):
[properties (data)]
[methods]
[scope][static] class name : baseClass
{
[properties]
[methods]
[events]
etc.
}
Variables
Python
• Variable is case-sensitive
name associated with a
value of any type
• Type defined after
assignment
C#
• Variable is case-sensitive
name associated with a
value of a specific type
• Type defined in variable
declaration statement
Variable declaration/initialization
<type> <variableName> {= initialValue};
int x;
x = 3;
// Declare variable
// Initialize variable
int x = 3;
// Declare and initialize
int x, y, z; // Not recommended
// Declare on separate lines
Rules for variable naming
Same for Python and C#
Variable name syntax:
– _ or letter + any number of letters, digits, or _
– i.e. cannot begin with a number
Use names that describe the data they are associated with
– e.g. “recordCount” is better than “n”
Use lowercase letter for first character, upper case letter for other
words in name. This is called camelCase.
Cannot be a keyword of the language
Operators
Python
• +, -, *, /, % same as C#
• 2**3 is 23
C#
• +, -, *, /, % same as Python
• Math.Pow(2,3)
Output:
0
0.5
0.5
C# Operators and Expressions
<variable> = <operand> <operator> <operand>
<variable> <operator> <operand>
<variable> <operator>
//
//
//
//
++x add before expression evaluated
x++ add after expression evaluated
x
x
x
x
=
=
=
=
x
x
x
x
+
+
-
1,
1,
1,
1,
z
z
z
z
=
=
=
=
x + 1
x
x – 1
x
p. 46, 47 in Watson et al.
Operator Precedence
Same for Python and C#
Parentheses/Brackets
Exponentiation
Muliplication – Division
Addition - Subtraction
Output: 17
Operator polymorphism
Python
+ addition
+ string concatenation
* multiplication
* string repetition
C#
+ addition
+ string concatenation
Comments
Python
C#
// Comment out single line
/* Comment out
multiple lines */
comments with //
C# Comments Examples
//, ///, /*
*/
“The best kind of comments are the ones you don't need.
Allow me to clarify that point. You should first strive to make
your code as simple as possible to understand without relying
on comments as a crutch. Only at the point where the code
cannot be made easier to understand should you begin to add
comments.”
From http://www.codinghorror.com/blog/archives/000749.html
Functions – Syntax for Definition
Python
Syntax:
C#
Syntax:
def name([params]):
statements
[return value]
[scope][static] type name ([params])
{
statements
[return [value];]
}
scope keywords include public, internal (default),
protected, protected internal, private
If static is included, function belongs to class
instead of instance of class
type refers to type returned by function
Can be any type including user-defined types. Is
“void” if it returns nothing
params include type (e.g. string param1)
Functions – Define and call
Syntax:
[scope][static] type name ([params])
{
statements
:
[return [value];]
}
Define
Call:
Scope
“Visibility” of variables, functions, classes, etc in
a program.
Class:
[scope][static] class name
Function:
[scope][static] type name ([params])
Variables:
[scope][static] type name [= value];
Scope
“Visibility” of variables, functions, classes, etc in a program.
Python
C#
Scope Review
public
internal (default)
protected
private
Entire solution
More …
Assembly only
More …
Derived classes
More …
Class only
More …
42 of 29
Booleans
Python
C#
True value: true
False value: false
Boolean Operators
Python
or, and
C#
|, ||, &, &&
Comparison operators are the same for Python and C#
Flow control - Branching
Flow control - Branching
Python
C#
if condition:
# Statements for true
# condition
elif condition:
# Statements for alternate
# true condition
else:
# if all above conditions
# are false
if (condition)
{
// Statements for true
// condition
}
else if (condition)
{
// Statements for alternate
// true condition
else
{
// if all above conditions
// are false
}
Branching with if
Branching with switch
Replacing simple if … else
• If the “if … else” is being used to simply set a
boolean variable, set the variable using a
boolean assignment statement
Replace this
with
or
Ternary (conditional) Operator ?
• Used to set a non-bool type variable based on
a condition
Syntax:
variable = condition ? true_expression : false_expression
Replace this
with
or
Flow control - Repetition
Previous code
Code to repeat
Loop
Is condition true?
Next code
Flow control - Repetition
Python
C#
for target in list:
# Statements executed for
# each item in list.
foreach (type target in list)
{
// Statements executed for
// each item in list.
}
# Number of iterations
# controlled by number of
# values in list
# target is assigned each
# value in list
for (type target = first_value;
condition_to_continue;
change_target_variable)
{
// Statements executed
// while condition to
// continue is true
}
Looping with for
Looping with while
Looping with do
Interrupting loops
• continue
– Continue with next
target value
• break
– Exit from loop
• return
– Exit from loop &
containing function
Standard modules/libraries
Python
• Standard modules
–
–
–
–
–
–
–
–
sys
os
os.path
urllib
xml
shutil
glob
etc.
C#
• Framework Class Libraries
(DLL) organized into
Namespaces like
–
–
–
–
–
–
–
System
System.Collections
System.IO
System.Web
System.XML
System.Data
etc.
Using modules/libraries
Python
C#
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll
using keyword
System namespace is part of
mscorlib (Microsoft Common Object Runtime Library)
All C# programs require a reference to mscorlib
Class libraries, namespaces, classes
Class Libraries are stored in
a .NET assembly (DLL)
Namespaces are a way of
naming a group of related
classes and other types
Namespaces can be nested.
Namespace
icon
60/50
.NET Framework Overview
CLS specifes rules .NET
languages must follow to create
.NET code that will reference the
.NET Framework Class Libraries
(.NET DLL Assemblies) and
.NET CTS.
CLS
(Common Language Specification)
C#, VB.NET, Managed C++, J#
Framework Class Libraries
UI
Services
Data Access
Web Form
WinForm
WPF
WCF
WorkFlow
ADO.NET
Entity Framwork
LINQ to SQL
Framework Base Classes & CTS (Common Type System)
IO, Collections, Security, Threading, etc.
.NET compilers will compile
.NET code into CIL stored in
.NET assemblies (EXE or DLL)
.NET CLR will perform JIT
(Just-In-Time compilation) to
native machine code and ensure
that the .NET assembly runs
properly and securely.
Compilers
CIL (Common Intermediate Language)
CLR (Common Language Runtime)
Windows OS
61/50
Win32, IIS, MSMQ
Keys to remember
F1 – Context sensitive Help
(If cursor is on keyword, help on keyword provided)
F6 – Build code (compile) without running
F5 – Build code (compile) and run
F11 – Step through code, into called functions
F10 – Step through code, not into called
functions
Shift-F5 – Stop running code
F9 – Toggle Breakpoint at current statement
Links for VS 2010 and C#
• “Quick Tour” of the VS 2010 IDE
• Beginner Developer Learning Centre
• Csharp-station.com tutorial