Python

advertisement
By: Meg Yahl
History of C#

“Father of C#” Anders Hejlsberg

Created in 2000

Built on .NET Framework
What’s in a Name?

C# is COOL!
 C-like Object Oriented Language

But… so are a lot of other things
 Trademarking nightmares
Looking Sharp
C
Design

“Create a first class modern language
on the CLR platform that would appeal
to the curly braces crowd: the C++
programmers of the world at the time,
and
competitively,
the
Java
programmers.”
– Anders Hejlsberg

Versioning
 Designed to be backwards compatible
Identifier Names

Only letters, numbers, and underscores

Syntactically must start with a letter or
an underscore

Actually starting with an underscore is
(generally) considered bad practice.
 Okay in certain situations
 Confusing when used elsewhere
So… What’s Your Type?



Case sensitive
Strongly typed
Statically typed
(mostly)

 C# 4.0 introduced

Value Types
Reference Types
Generic type
parameters
Pointer types.

Reliability   
dynamic binding



Type-safe
 Keyword unsafe
Some COOL Qualities
“C# supports a Unicode character set,
which means that letters from any
language can be stored and used. You can
also use any Unicode character to name
your variables.”
 Keywords can be used as variable names
IFF prefixed with the @ symbol.

class class {...} // Illegal
class @class {...} // Legal
The @ symbol doesn’t form part of the
identifier itself.
 Readability 

“Everything is an Object”
Not quite…
 C# has boxing and unboxing
 Boxing is like taking the value type and
wrapping it up in a little box, which can
then be treated like an object.
 Unboxing simply reverses this process.
 “Every non-pointer type in C# is
convertible to an object” (Lippert).

Value Types
Store actual data
 Don’t need new
operator since “each
value type has an
implicit default
constructor that
initializes the default
value of that type”
(Microsoft
Corporation).
 Can be represented
both in boxed and
unboxed form.







All numeric types
Char type
bool type
Custom structs
Custom enum types
Cannot contain the
null value
 “nullable types feature
does allow for value
types to be assigned
to null” (Microsoft
Corporation).
More Value Types
Enum
Struct


Encapsulates small groups of
related variables
May contain:












constructors
constants
fields
methods
properties
indexers
operators
events
nested types
Can “implement an interface, but
they cannot inherit from another
struct” (Microsoft Corporation).

User-defined data type
Useful for providing “an
efficient way to define a
set of named integral
constants that may be
assigned to a variable”
(Microsoft Corporation).
Readability 
Reference Types
Made of an object and a
reference to that object
 Only store references to
data, not the data itself
 “Two or more reference
type variables can refer
to a single object in the
heap, allowing
operations on one
variable to affect the
object referenced by the
other variable” (Afana).

Class types
 Array types
 Delegates
 Interface types

 Reliability 
Arrays

Zero-based
 One type only



Rectangular

int[][] multiArray = new int[3,2];

Jagged (Array of Arrays)

int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];
Writability 

Square brackets for
declaration and
indexing
Memory efficient
Know own length
System.Array class
has useful properties
and methods
“All array indexing is
bounds-checked by
the runtime” (Albahari
35).
Generic Types
Useful for writing reusable code that can
accommodate different types.
 Like a template that gets filled in once
needed
 Can increase type safety and reduce
casting and boxing

Writability 
 Reliability 

Pointers




Directly manipulate memory
Only usable with unsafe code and IDE setting
“Pointer types are primarily useful for
interoperability with C APIs, but may also be
used for accessing memory outside the
managed heap or for performance-critical
hotspots” (Albahari 170).
Reliability 
 “Warning: There be dragons here.” – Comments in
code
Expression/Assignment
Statements

Primary Expressions
 “Composed of operators that are intrinsic to the basic
plumbing of the language” (Albahari 45).

Void Expressions
 No value

Expression Statements
 Can stand alone as valid statements
 “Must either change state or call something that might
change state.” (Albahari 49).
 Includes
○ Assignment expressions (including increment and
decrement expressions),
○ Method call expressions (both void and nonvoid),
○ Object instantiation expressions” (Albahari 49).
Operators





Transform and combine
expressions
Numerous operators of
different types
Many of these operators
can also be overloaded.
Assignment operator is =
Compound assignment
operators

 +=, -+, *=, /=, etc.
 Writability  
 Readability 













Primary
Unary
Multiplicative
Additive
Shift
Relational and type testing
Equality
Logical AND
Logical XOR
Logical OR
Conditional AND
Conditional OR
Conditional
Assignment
StatementLevel Control Structures
Selection
 Iteration
 Unconditional branching (jump
statements)
 Most control expressions are specified
in parentheses and must be of type
Boolean.

Selection/Iteration


if-else constructs
switch statements
do…while
 while
 for
 foreach…in…

•C# supports nested if-else constructs and loops
•Can nest as deep as desired, but code can become messy
Selection
Iteration (Loops)
•Readability 
GOTO
It was my idea first :)
Jump Statements

break


continue


Can appear anywhere in a nonvoid method. Their job is to exit the method and return an
expression of the method’s return type
throw


Allows code execution to jump to another label within the statement block
When used irresponsibly, code can become nearly unreadable.
Many programmers have reserved goto as an absolute last resort, or even shunned it
altogether.
return


Immediately jumps to the end of a loop and starts the next iteration
goto




Immediately ends the execution of the body of an iteration or switch
Detects the occurrence of an error and throws the relevant exception, which is then handled
by the programmer
Jump statements “obey the reliability rules of try statements” (Albahari 54).

Specifically, “a jump out of a try block always executes the try’s finally block before reaching
the target of the jump, [and] a jump cannot be made from the inside to the outside of a finally
block” (Albahari 54). This is important in exception handling
Subprograms





In C#, subprograms in general are referred
to as methods.
Can have any type, including user-defined
types and void.
C# does not allow nested methods.
Only have stack-dynamic local variables
Type-checking: “C# requires the type of a
ref actual parameter to match exactly the
type of its corresponding formal parameter”
(Sebesta 410).
Parameter passing

Pass-by-value (in-mode
parameters)




C# default
Passes a copy to the method
Fast for scalars, but uses more
storage
Pass-by-result (out-mode)

Pass-by-value-result (inoutmode)




Pass-by-reference (inout-mode)


Same pros and cons as pass-byvalue
 Also risks possible parameter
collision
 C# requires the out modifier in the
formal parameter list when using
out-mode parameters.
Combo with all the good and bad
More storage and time cost
Greater chance of variable mixups




Requires keyword ref before formal
and actual parameters
Transmits an access path, usually
just an address, to the called
subprogram
More efficient with time and space
Slower formal parameter access
Can create aliases, which can really
hurt readability and reliability
“C# allows methods to accept a variable number of parameters,
as long as they are of the same type.” (Sebesta 393)
Methods As Parameters (Delegates)





Typically, passing methods as parameters is handled
by passing pointers to the method instead of the
actual method itself.
“In C#, the power and flexibility of method pointers is
increased by making them objects. These are called
delegates, because instead of calling a method, a
program delegates that action to a delegate”
(Sebesta 420).
Essentially, a delegate is like a messenger.
The program invokes a delegate, which in turn
invokes the desired method.
This provides a level of abstraction from the caller
and the target method.
Delegate Example: Call Center







Let the delegate class be thought of as a telemarketer call
center.
Each telemarketer (the delegate) has a list of phone
numbers (the target methods).
This list can contain zero (null) or more phone numbers.
The telemarketer must go through list in order (a
multicast delegate) before they can leave work.
At the end of a long day, only the last number called really
stands out in the telemarketer’s memory.
The call center can also have automated dialers with
prerecorded messages (generic delegates).
In the case of a technical support center, the employees
(delegates) are presented with a particular situation that
has occurred (event), and they must resolve the situation
accordingly (event handling).
Overloaded Methods
C# allows overloaded methods
However, they must have some distinction
from each other or the program cannot tell
which method to use.
 This ambiguity is avoided by varying the
number, order, or type of parameters.
 Because C# allows mixed-mode
expressions, different return types does not
help to distinguish the methods
 The meaning is determined by the actual
parameter list when the method is called.


Generic Methods
A generic method is a method “whose
computation can be done on data of
different types in different calls”
(Sebesta 397).
 DRY (“don’t repeat yourself.”)
 C# generic methods are unique in that
“the actual type parameters in a call can
be omitted if the compiler can infer the
unspecified type.” (Sebesta 427)

Abstract Data Types/Encapsulation






Interfaces do not have to be declared abstract since they are
always implicitly abstract, as are their members.
C# interfaces are similar to Ada package specifications in that
they specify their members, but they do not implement them.
The class or struct that inherits the interface is responsible for
implementing every member specified in the interface.
These “interface members are always implicitly public and
cannot declare an access modifier, [so] implementing an
interface means providing a public implementation for all its
members” (Albahari 92).
It is interesting to note that structs cannot inherit from classes,
but they can implement interfaces.
Additionally, classes can only inherit from one class, but they
can implement more than one interface. Albahari states that
objects can be implicitly casted to any interface that they
implements (Albahari 92).
Support for ObjectOriented Programming


C# was essentially built with object-orientation in mind.
C# has a few unique object-oriented features:
 Unified type system;
○ All types ultimately share a common base type
 Classes and interfaces;
○ Classes are types
○ An interface is like a class except it is only a definition for a type,
not an implementation (Albahari 1).
○ Many languages do not support multiple inheritance, but C# can
by implementing multiple interfaces.
 Properties, methods, and events.
Properties are function members that encapsulate a piece
of an object’s state, such as a button’s color or a label’s
text.
 Events are function members that simplify acting on
object state changes (Albahari 2).

Concurrency
C# handles competition synchronization naturally by using
monitors.
 Cooperation synchronization must be provided with some
form of semaphores

 Data structures that consist of an integer and a task description
queue.
 If semaphores are used incorrectly, they can result in “errors that
cannot be detected by the compiler, linker, or run-time system”
(Sebesta 624). These potential undetected errors can severely
impact reliability.
“C#’s support for concurrency is based on that of Java but
is slightly more sophisticated”
 “All .NET languages have the use of the generic
concurrent data structures for stacks, queues, and bags,
for which competition synchronization is implicit” (Sebesta
625).

Error and Event Handling
Built-in class: System.Exception.
Uses try, catch, and finally blocks.
The catch block executes when an error occurs in the try block.
The finally block executes no matter what when the other
blocks are done.
 Catch blocks are used to handle the exception or log the issue.
Programmer specifies the exception to be handle in the catch
block
 Can catch the entire System.Exception class, but rarely
needed.




 Potential recovery of the program regardless of the specific exception
type
 Planning to rethrow the exception after logging it
 Last resort prior to termination of the program


Handle multiple exception types with multiple catch clauses
“Exceptions are relatively expensive to handle, taking hundreds
of clock cycles” (Albahari 136).
Events
In .NET languages, “event handlers are
registered by creating an EventHandler
object and assigning it to the predefined
delegate associated with the GUI object
that can raise the event” (Sebesta 665).
 After an event is detected, the code in
the corresponding EventHandler is
executed.

Readability

“Code like the
person who
maintains your code
after you is a
psychopath who
knows where you
sleep.”
– Dr. Brenda Wilson
Readability .5
Pros



Basic syntax feels
intuitive
Abstracting common
elements keeps code
free of clutter.
User-defined structs and
enumerations let
programmers clearly
name what may
otherwise be confusing.
Cons


Many ways to do
different things
Aliasing
 Too many names for one
thing can be really
confusing.
Writability 
Many different ways to accomplish a particular task
 While not a direct language feature, Microsoft’s
Visual Studio IDE makes writing code a breeze with
Intellisense.
 C# is very strict with its syntax, which can hinder
beginners initially.

Reliability .5
Pros




Strict type-checking
Implicit casting only if no
loss of precision
Built-in Exception class
Any use of unsafe code
has to be explicitly stated
in the code and enabled
in the complier
Cons

Aliases
 Too many names is
confusing and easily leads
to errors.

Semaphores when used
incorrectly
 Difficult to detect any
problem
Reliability
Sources

http://www.codeguru.com/csharp/sample_chapter/article.php/c11387/Storing-Information-with-Variables-in-C.htm

Afana, Nadeem. Primitive, Reference, and Value Types. 12 September 2005. 30 September 2012
<http://www.codeproject.com/Articles/11212/Primitive-Reference-and-Value-Types>.
Albahari, Joseph, and Ben Albahari. C# 4.0 in a Nutshell. 4th Edition. Sebastopol: O'Reilly Media, Inc., 2010.
Clark, Dan. "Overview of Object-Oriented Programming." Clark, Dan. Beginning C# Object-Oriented Programming.
Apress, 2011. 6.
Hejlsberg, Anders. The A-Z of Programming Languages: C# Naomi Hamilton. 1 October 2008.
Hejlsberg, Anders. The A-Z of Programming Languages: C# Naomi Hamilton. 1 October 2008.
Lippert, Eric. Not everything derives from object. 6 August 2009. 10 November 2012
<http://blogs.msdn.com/b/ericlippert/archive/2009/08/06/not-everything-derives-from-object.aspx>.
Microsoft Corporation. C# Operators (C# Reference). 2012. 30 September 2012 <http://msdn.microsoft.com/enus/library/6a71f45d.aspx>.
—. Enumeration Types (C# Programming Guide). 2012. 30 9 2012 <http://msdn.microsoft.com/enus/library/cc138362.aspx>.
—. for (C# Reference). 2012. 30 September 2012 <http://msdn.microsoft.com/en-us/library/ch45axte.aspx>.
—. foreach, in (C# Reference). 2012. 30 September 2012 <http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx>.
—. if-else (C# Reference). 2012. 30 September 2012 <http://msdn.microsoft.com/en-us/library/5011f09h.aspx>.
—. Reference Types (C# Reference). 2012. 30 September 2012 <http://msdn.microsoft.com/en-us/library/490f96s2.aspx>.
—. Struct (C# Reference). 2012. 30 September 2012 <http://msdn.microsoft.com/en-us/library/ah19swz4.aspx>.
—. switch (C# Reference). 2012. 30 September 2012 <http://msdn.microsoft.com/en-us/library/06tc147t.aspx>.
—. Types (C# Programming Guide). 2012. 30 September 2012 <http://msdn.microsoft.com/en-us/library/ms173104.aspx>.
—. Value Types (C# Reference). 30 September 2012 <http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx>.
Sebesta, Robert W. Concepts of Programming Languages. 10th Edition. New York: Addison-Wesley, 2012.
Vrajitoru, Dana. Name, Scope, Binding. 2012. 30 September 2012
<http://www.cs.iusb.edu/~danav/teach/c311/c311_3_scope.html>.

















Download