History of C

advertisement
C# - The Beautiful “Chord” of Computing
Seth Waldrop
CSC 415 – Programming Languages
Dr. Bill Lyle
November 8, 2011
C# - The Beautiful “Chord” of Computing
History of C#
Introduction
In the late 1990s, Microsoft introduced the .NET Framework initiative. This initiative
was designed to fulfill the following objectives:






To provide a consistent object-oriented programming environment whether object code is
stored and executed locally, executed locally but Internet-distributed, or executed
remotely.
To provide a code-execution environment that minimizes software deployment and
versioning conflicts.
To provide a code-execution environment that promotes safe execution of code, including
code created by an unknown or semi-trusted third party.
To provide a code-execution environment that eliminates the performance problems of
scripted or interpreted environments.
To make the developer experience consistent across widely varying types of applications,
such as Windows-based applications and Web-based applications.
To build all communication on industry standards to ensure that code based on the .NET
Framework can integrate with any other code. (Microsoft, Inc., 2011)
In February 2002, Microsoft released version 1.0 of the .NET framework. As years
progressed, Microsoft has released various updates and newer versions (See Appendix A),
culminating with the current version, .NET-4.0.
Object-oriented programming, or OOP, wasn’t a new trend, as the idea had been around
as early as the 1950s (McCarthy, 2011). However, with the advent of Microsoft’s .NET
Framework came an influx of newer object-oriented languages. Thus, C# emerged.
C# was developed by Microsoft Corporation as part of their .NET initiative. And it was
actually developed “in response to the success of Sun Microsystems' Java programming
language,” (C# Online.Net, 2011). C# has been derived from C, C++, and Java, and some
concepts of Microsoft’s Visual Basic also went into the making of this language. (C# Online.Net,
2011).
C# - The Beautiful “Chord” of Computing
The “primary architects of C# were Peter Golde, Eric Gunnerson, Anders Hejlsberg,
Peter Sollichy, and Scott Wiltamuth.” Of these, Anders Hejlsberg was the principal designer and
lead architect. Hejlsberg’s “pedigree” is rather prominent, including experience in designing the
framework of J++ (Microsoft’s old version of Java), as well as Delphi and Turbo Pascal (C#
Online.Net, 2011).
It is also interesting to note that, “both C# and the Common Language Infrastructure
(CLI) have been submitted to international standards organizations European Computer
Manufacturers Association (ECMA) and International Organization for Standardization (ISO) /
International Electrotechnical Commission (IEC),” (C# Online.Net, 2011).
Design Goals
C#’s developers had a number of design goals in mind for the language, including:
 C# is intended to be a simple, modern, general-purpose, object-oriented programming
language.
 The language, and implementations thereof, should provide support for software
engineering principles such as strong type checking, array bounds checking, detection
of attempts to use uninitialized variables, and automatic garbage collection. Software
robustness, durability, and programmer productivity are important.
 The language is intended for use in developing software components suitable for
deployment in distributed environments.
 Source code portability is very important, as is programmer portability, especially for
those programmers already familiar with C and C++.
 Support for internationalization is very important.
 C# is intended to be suitable for writing applications for both hosted and embedded
systems, ranging from the very large that use sophisticated operating systems, down
to the very small having dedicated functions.
 Although C# applications are intended to be economical with regard to memory and
processing power requirements, the language was not intended to compete directly on
performance and size with C or assembly language.
(C# Online.Net, 2011)
C# - The Beautiful “Chord” of Computing
Versions
C# has, of course, come a long way from its initial release in 2000 (C# Online.Net,
2011). Much like the .NET Framework, C# has released various versions. In fact, the release
dates for each version of C# is almost identical to that of each subsequent version of the .NET
Framework (Compare Appendices A and B). With each version release came, as one would
expect, more functionality not offered before, as well as improved functionality on what was
already offered. The current version—C#-4.0—will be used as the scope of this evaluation.
However, it is imperative, in evaluating the current state of a language, to see not only where the
language is now, but also where it has been. Thus, in Appendix C there is a comparative list of
the “highlights” each of versions 2.0 and 3.0, respectively, brought to the table.
Overview of C# Language Design, Syntax, and Semantics
Names, Bindings and Scopes
As the program is built, it is always best to have consistency in the naming of variables,
methods, etc. Having a consistent naming convention does absolute miracles for the readability
of one’s code, regardless of what language he/she is typing in. Typically a coding convention is
decided upon by a particular company or team; however, it is becoming more and more common
to see a more standardized naming convention in the software development arena. Following is
the common standard among C# programmers today.
Private variables should be prefixed with an underscore (_) character and the words
should follow a “camel-case” format. An example of this is: “_privateVariable”. (Zahn, 2003)
Local variables should follow the camel-case format, as well. Essentially, they will look
the same as the private variables, except without the underscore: “localVariable”. (Zahn, 2003)
C# - The Beautiful “Chord” of Computing
Namespaces will follow the pascal-case format, and one should develop distinguishable
names in attempt to prevent (or lessen) the possibility of having “two published namespaces with
the same name.” (Zahn, 2003) An example is: “System.Windows.Data”.
Classes should be named also using the pascal-case format. Classes should also be
named using a noun or noun phrase: “SampleClassName”. (Zahn, 2003)
Interfaces should be prefixed with an “I” and should also use pascal-casing. Neither
interfaces nor classes should use an underscore character. An example of an interface name is:
“IExampleInterface”. (Zahn, 2003)
Method names should be verbs or verb phrases and should use the pascal-casing format,
such as: “SampleMethod();”. (Zahn, 2003)
Properties should also be in pascal-case format: “SampleProperty”. (Zahn, 2003)
Event handlers should be in pascal-case, and have the EventHandler suffix attached to it;
the EventArgs suffix should also be tied to the end of the second parameter in the event handler
method (discussed later under “Exception Handling and Event Handling”. A sample event
handler is: “SampleEventHandler( object sender, SampleEventArgs e)”. (Zahn, 2003)
An exception object (also discussed under “Exception Handling and Event Handling”) is
typically given the name “ex”. (Zahn, 2003)
As far as variables go, the naming of them used to vary based on what type they were (for
instance a variable of "int" type would be prefixed with an “i”). However, in my own
experience, Microsoft has most recently begun using the type as the suffix in the name. For
example: “int newSampleInt;” or possibly: “string newSampleString;”. (Zahn, 2003)
C# - The Beautiful “Chord” of Computing
Scopes in C# are determined on a run-time basis. So as long as whatever is being called
is in scope when it is called, the program will run smoothly. For instance, the example shown
below has two scoping issues.
public void Method1()
{
int a;
while (...)
{
double a, b;
}
int sum = a + Convert.ToInt32(b);
}
The variable “a” is declared inside of Method1. Then, “a” is also attempting to be declared
inside the while loop. The compiler complains about this because “’a’ is already declared in this
scope, and this new ‘a’ would change the meaning of the ‘a’ already declared in scope. So even
though the ‘a’ inside the while loop is declared as type double, the compiler still won’t allow it
because the variable ‘a’ is already declared in the “current scope.” The second issue the
compiler complains about is using the ‘b’ outside of the while loop. Because ‘b’ is a variable
local to the while loop, anything outside of the while loop cannot access it. However, anything
inside of the while loop (including another nested loop) can access it. To make a workable
solution (at least scope-wise), we would need to change the above code to the following:
public void Method1()
{
int a;
while (...)
{
double b;
int sum = a + Convert.ToInt32(b);
}
}
C# - The Beautiful “Chord” of Computing
Data Types
C# distinguishes between two categories of data types: value types, and reference types.
(Wrox, 2010, p. 31) It is interesting to note that “some C# types have the same names as C++
and Java types but have different definitions,” (Wrox, 2010, p. 31). An example of this is
looking at the “int” type. In C#, “int” is always a 32-bit signed integer. However, in C++, “int”
is a signed integer, “but the number of bits is platform-dependent,” (Wrox, 2010, p. 31). In
looking to the future possibilities of porting C# and .NET to other platforms, all data types in C#
have been designed to be “platform-independent,” (Wrox, 2010, p. 31).
C# supports the use of eight different predefined integer types (Wrox, 2010, p. 31).
These are listed in Appendix D, under “Integer types.”
Two floating-point types are also supported in C#: float (32-bit single-precision floating
point) and double (64-bit double-precision floating point). (Wrox, 2010, p. 32)
Decimal, Boolean, and character types are also supported. These types and their values
can also be found in Appendix D, under their respective labels. (Wrox, 2010, pp. 32-33)
Two categories of predefined reference types are supported in C#: object and string.
(Wrox, 2010, p. 33) The object type, in C#, is the “ultimate parent type from which all other
intrinsic and user-defined types are derived,” (Wrox, 2010, p. 36).
The string type, at a glance, appears to be a value type:
string sampleString = "Hello";
However, what is going on “behind the scenes” is the string object is placed on the heap, not the
stack. (Wrox, 2010, p. 36) So “when you assign one string variable to another string, you get
two references to the same string in memory,” (Wrox, 2010, p. 36). Interestingly, though, strings
are “immutable,” meaning that if you have the following code:
string sampleString = "Hello";
string newString = sampleString;
C# - The Beautiful “Chord” of Computing
sampleString = "World";
The result would produce sampleString as “World” and newString as “Hello.” Since newString
was assigned “sampleString,” you would expect (since string is a reference type) that when we
change sampleString’s value, the value of newString would also change. However, this is not
the case, as newString is still assigned the same string as originally assigned.
Expressions and Assignment Statements
There are various operators available in C#. Unary operators include plus (+), minus (-),
increment (++), decrement (--), logical negation (!), and bitwise complement (~). (CSharpHelp,
2006) The plus, minus, increment and decrement operators operate as one would typically think.
The logical negation operator is used to invert a Boolean result. For instance if you wanted to
run a loop while a bool variable “x” was not true, you would write “!x”. The bitwise
complement operator simply inverts the binary representation of an expression (switching the 1’s
to 0’s, and vice versa), (CSharpHelp, 2006).
Binary operators supported in C# include multiplication (*), division (/), remainder (%),
addition (+), subtraction (-), left shift (<<), and right shift (>>), (CSharpHelp, 2006). These
operators, likewise, do their respective operations as you would expect. As a note, the left and
right shift perform a shift in the binary representation of a specified object either left or right
(respectively) a specified number of positions.
Relational operators include the standard equal (==), not equal (!=), less than (<), greater
than (>), less than or equal to (<=), and greater than or equal to (>=), (CSharpHelp, 2006). The
equal and not equal operators tend to be difficult initially to programmers new to the language—
a common mistake is to only put one “=” sign when two are necessary. Also, with the not equal
operator comes more trouble with new-to-the-language programmers: a lot of languages use the
C# - The Beautiful “Chord” of Computing
“/=” to represent not equal, thus a reconditioning process must ensue, just as in learning any
other new language.
Assignment statements in C# are very straightforward. A simple “=” is used. (Microsoft,
Inc., 2011) This can be compared to the assignment operator in Ada: “:=”. Examples of
assignment statements have been used throughout this evaluation (see above for examples).
Operators coupled with the equal sign (such as +=, *=, %=, etc.) provide a shorthand for
the programmer to write assignment statements based on the respective operator used. For
instance, instead of writing “x = x + y” the programmer could instead choose to write “x += y”
and get the same result. Likewise, for finding something such as the remainder of integer
division (%), one can write “x %= y” instead of “x = x % y.” (Microsoft, Inc., 2011)
Statement-Level Control Structures
Flow control in C# is supported through three major categories: conditional statements,
loops, and jump statements.
The “if” statement is very intuitive and simple. First, you are not required to have a
“then”, “else”, or “end if”, or any other key words within the statement as some languages
require. If the statement can be included in one line, it doesn’t even need curly braces ({ }) to
enclose it. However, a common practice, for consistency and readability, is to include the curly
braces anyway. C# does not have a designated key word for a condition “elsif” as in other
languages. However, it does support the same idea by starting another “if” statement. An
example is shown below:
int x = 4;
if (x > 5)
{
...
}
else if (x < 5)
{
C# - The Beautiful “Chord” of Computing
...
}
else
{
...
}
(Wrox, 2010, pp. 37-38)
Another way to go about coding a conditional statement in C# is using the “switch-case”
combination. The switch statement evaluates the state of a specified parameter and tests to see if
the value of the parameter is equal to any of the “cases” that are within the switch block. If a
case is satisfied, the code directly following the case will execute. Otherwise, if none of the
cases are satisfied, the “default” case will execute. Below is an example:
int x = 3;
switch (x)
{
case 1:
...
break;
case 3:
...
break;
default:
...
break;
}
Notice the “break” key word. Some may think this is a hassle, but it prevents the classic case of
“fall-through” errors within the program. The only exception where “fall-through” is still
possible is if the case is empty. (Wrox, 2010, p. 39)
Looping in C# is also very powerful. The “for” loop provides the opportunity to iterate
through a loop where a condition is tested before each iteration. The following is the equivalent
of “for i = 0 to 99” in VB:
for (int i = 0; i < 100; i++)
{
}
(Wrox, 2010, p. 41)
The “while” loop in C# is a pretest loop that takes only one expression argument:
C# - The Beautiful “Chord” of Computing
while (condition)
{
}
(Wrox, 2010, p. 42)
The “do…while” loop is very similar to the aforementioned “while” loop, except it is the
post-test counterpart:
do
{
} while (condition)
(Wrox, 2010, p. 42)
Lastly, C# offers the “foreach” loop, which loops through each item in a specified
collection:
foreach (int i in integerArray)
{
}
(Wrox, 2010, p. 43)
We have already seen one of the “jump” statements (break). However, there are also
three others: goto, continue, and return. The “goto” statement allows the user to “jump” directly
to the specified line within the program, (Wrox, 2010, p. 43). The “continue” statement works
similarly to the “break” statement. However, it only “jumps” out of the current iteration, instead
of “jumping” out of the loop altogether, as “break” does, (Wrox, 2010, p. 44). The “return”
statement is “used to exit a method of a class, returning control to the caller of the method,”
(Wrox, 2010, p. 44). If the specified method has a return value, the value would be placed here
in code as well in the format “return value;” (Wrox, 2010, p. 44).
Subprograms
C# supports the use of subroutines via methods. Methods in C# are declared in either a
class or a struct, (Microsoft, Inc., 2011). The parameters of a method are located in parentheses
following the method name, (Microsoft, Inc., 2011). When a value type is passed as an
C# - The Beautiful “Chord” of Computing
argument, by default a copy of that value type is what is actually passed. This way, the original
copy isn’t affected by the changes to the argument. Reference types are passed into methods by
reference, naturally. This reference points directly to the original, so changes to the argument
does directly affect the original, (Microsoft, Inc., 2011).
The return type of a method is specified directly before the method name. Methods may
return types as mentioned in the “Types” section above, or they may also return “void.” If they
do not return “void, the method can return the value by using the return keyword,” within the
method, (Microsoft, Inc., 2011). An example method is shown below:
public int AddTwoNumbers(int number1, int number2)
{
return number1 + number2;
}
(Microsoft, Inc., 2011)
Abstract Data Types and Encapsulation Constructs
C# supports the use of abstract data types through its “var” type. “Var” is an “implicitly
typed local variable,” where the type is determined by the compiler, (Microsoft, Inc., 2011). The
compiler determines the type of the “var” variable by looking at what is assigned to it, and how it
operates. Essentially, the “looks-like-a-duck” principle applies here.
Access modifiers are supported in C# through four ways: public, protected, internal, and
private. Public access is the most permissive level of access, (Microsoft, Inc., 2011). In other
words, public members enforce no restrictions on access to its parts.
Protected access is next highest, in terms of restrictions on access to its members. It is,
“accessible within its class and by derived class instances,” (Microsoft, Inc., 2011).
Next up the ladder is internal access. Internal types or assemblies are accessible, “only
within files in the same assembly,” (Microsoft, Inc., 2011).
C# - The Beautiful “Chord” of Computing
Finally, there is private access, the most restricted access of them all. Private members
are accessible, “only within the body of the class or the struct in which they are declared,”
(Microsoft, Inc., 2011).
Support for Object-Oriented Programming
As stated in the design goals above, C# was designed to be a “simple, modern, general
purpose, object-oriented language.” So, naturally, it supports the object-oriented paradigm. C#
makes use of classes and structs to lay the “blueprint” of each respective type, (Microsoft, Inc.,
2011). Objects, then, are essentially “just a block of memory that has been allocated and
configured according to the blueprint,” (Microsoft, Inc., 2011). These structs and classes look
essentially identical to those in C++, for those familiar with C++, containing similarly coded data
members, constructors, etc.
Concurrency
Concurrency in C# is supported via the multi-threading capabilities. Concurrency is not a
new concept; however, with each release of the .NET framework, concurrency becomes less
work for the programmer as the framework takes on more and more of the “dirty work.” For
instance, in the .NET-4.0 framework, there is a “new namespace with collections that make it
easier to write multi-threaded programs that share data between threads,” (Wagner, 2011). This
new collection essentially does the majority of the work needed to “implement a
producer/consumer idiom,” in the applications you produce (Wagner, 2011).
C# - The Beautiful “Chord” of Computing
Exception Handling and Event Handling
The exception handling functionality of C# is incredible. C# makes use of its “try-catchfinally” block as a means for handling any “unexpected exceptions” that may arise in the
application, (Microsoft, Inc., 2011). This block of code essentially looks like this:
try
{
...
}
catch (Exception ex)
{
...
}
finally
{
...
}
The “try” portion is where you would put the code you want to attempt to execute. “Catch” is
triggered if any exceptions are thrown while attempting to run code in the “try” block. “Finally”
is used to basically clean up any resources used during the “try” block, (Microsoft, Inc., 2011).
Event handlers in C# look very similar to the layout of the methods, mentioned earlier.
Shown below is a sample event handler—auto-generated by Visual Studio—to handle a “mouse
click” event on a button:
private void AddButton_Click(object sender, RoutedEventArgs e)
{
...
}
The first parameter (sender) is what triggered the event to happen. The second parameter (e) is
used to hold data to be used in the event handler, (Dutta, 2002).
Evaluation of C#
Using Sebesta’s four criteria for evaluation (readability, writability, reliability, and cost),
we will now evaluate C#.
C# - The Beautiful “Chord” of Computing
Readability
C# is relatively easy to read. As with any new programming language, there will be time
needed to get used to the overall format. However, due to its similarity to C++ and Java, it is
very easy and manageable for one to move rather smoothly from these languages into C#.
Loops are simple and straightforward, contributing to the readability of C# code. Having
the iteration definitions conveniently located in one place at the beginning (or end, for the
“do…while” loop) contributes to this simple layout.
Exception handling is also fantastic to navigate through thanks to the “try-catch” block.
Event handling and methods are also easy to read with the use of a similar layouts for each.
Some would say the curly braces are not the easiest to read. However, I say they are a
plus. This is because the only time a curly brace is used is to open or close a block of code.
When you have a phenomenal IDE such as Visual Studio to assist in tabbing, and highlighting
correlating brackets and key words, you have an easy-to-read, and therefore easy-to-debug,
program.
Writability
Writability is arguably C#’s biggest strong point. Some concessions must be made in
that C# is case-sensitive, which may cause some writability issues, especially with programmers
coming from non-case-sensitive programming backgrounds. However, this is a minor sacrifice
that can be adjusted to rather quickly.
Being able to outline all iteration definitions for loops in one convenient parenthesized
statement makes defining the loop parameters a snap.
C# - The Beautiful “Chord” of Computing
Again, having a solid IDE such as Visual Studio really helps with the writability. Visual
Studio’s intellisense assists you with giving you options of what pieces of code are able to be
placed in the current location. In fact, from easily navigated file structures, to drag-and-drop
functionality, Visual Studio puts so much ease on the programmer. With other downloadable
add-ons and extensions that include features that check for spelling errors to even autogenerating code, Visual Studio makes programming (especially programming in C#) such a fun
experience.
Reliability
C# is a highly reliable language as well. As mentioned above, C# was designed with the
future in mind. It was designed with the capability to be ported across multiple platforms in the
future.
One of the best parts about C# is the fact that it is such a widely-used language—and
growing in users every day. This makes for a bountiful support group when you get stuck on
solving a problem or need to understand a particular part of the language. Namely, Microsoft’s
MSDN library of documentation is very thorough and includes exhaustive help guides and
sample code for nearly any and every part of the C# programming experience.
Cost
Cost is C#’s weakest point. Not so much the cost of learning. Learning the language is
relatively simple, especially if you’re coming from a background of C++ or Java. With all the
tutorials and help-guides on the Web today, learning the language is relatively easy.
The real cost comes into play with purchasing Visual Studio licenses. Visual Studio
2010 Professional costs $549 per license, (Microsoft, Inc., 2011). VS2010 Premium jumps up to
C# - The Beautiful “Chord” of Computing
$2299 per license, and Ultimate edition is priced at $3799 per license, (Microsoft, Inc., 2011).
One might say, “Why don’t you just get a different IDE for developing C# programs?” The
reality is it would be ill-advised to get an IDE other than Visual Studio for any .NET
development. And even though the cost is high, and it was even mentioned as the biggest
weakness of developing in C#, but it is well-worth the cost—especially with the functionality
Visual Studio comes with and how much more productive it allows you to be.
Conclusion
C# is a wonderful language. Of course, it’s not perfect—no programming language is
perfect. Although it has its downsides, there are a lot more positive notes about C# that
outweigh the negative. From the simplicity, to the exhaustive documentation, to the brilliant
IDE that is Visual Studio, there are many positive “notes” that make C# the beautiful “chord” of
computing.
C# - The Beautiful “Chord” of Computing
Appendices
Appendix A
Version
Version
Number
Release Date
Visual Studio
Default in Windows
Windows XP Tablet and Media Center
Editions[4]
1.0
1.0.3705.0
2002-02-13
Visual Studio .NET
1.1
1.1.4322.573
2003-04-24
Visual Studio .NET
Windows Server 2003
2003
2.0
2.0.50727.42
2005-11-07
Visual Studio 2005 Windows Server 2003 R2
3.0
3.0.4506.30
2006-11-06
Windows Vista, Windows Server 2008
3.5
3.5.21022.8
2007-11-19
Visual Studio 2008 Windows 7, Windows Server 2008 R2
4.0
4.0.30319.1
2010-04-12
Visual Studio 2010
4.5
4.5.40805
2011-09-13 (Developer
Preview)
Visual Studio '11'
Windows 8, Windows Server 8
(Wikipedia, 2011)
Appendix B
Version
C# 1.0
C# 1.2
C# 2.0
Language specification
ECMA
ISO/IEC
December
2002
April 2003
June 2006
September
2006
C# 3.0
Date
.NET Framework
Visual Studio
January 2002
January
2002
.NET Framework 1.0
Visual Studio
.NET 2002
October 2003
April 2003
.NET Framework 1.1
Visual Studio
.NET 2003
September
2005[note 1]
November
2005
.NET Framework 2.0
Visual Studio
2005
August 2007
November
2007
.NET Framework 2.0 (Except
LINQ/Query Extensions) [1]
.NET Framework 3.0 (Except
LINQ/Query Extensions) [2]
.NET Framework 3.5
Visual Studio
2008
Visual Studio
2010
April 2010
April 2010
.NET Framework 4
Visual Studio
2010
Microsoft
None[note 2]
C# 4.0
(Wikipedia, 2011)
1. The Microsoft C# 2.0 specification document only contains the new 2.0 features. For older
features use the 1.2 specification above.
2. As of December 2010, no ECMA and ISO/IEC specifications exist for C# 3.0 and 4.0.
C# - The Beautiful “Chord” of Computing
Appendix C
C#-2.0



A new form of iterator that makes use of co-routines by way of the “yield” key word,
similar to that found in Python.
Generics or parameterized types support some features not supported by C++ templates
such as type constraints on generic parameters.
Nullable value types facilitate interaction with SQL databases. Such as:
int? variableName = null;

Partial types allow the separation of a class implementation into more than one source
file.
(C# Online.Net, 2011)
C#-3.0



Anonymous types: tuple types automatically inferred and created from object initializers.
Object initializers ease construction and initialization of objects.
Implicitly typed local variables permit the type of local variables to be inferred from the
expressions used to initialize them.
 Implicitly typed arrays: a form of array creation and initialization that infers the element
type of the array from an array initializer.
 Extension methods make it possible to extend existing types and constructed types with
additional methods.
 Lambda expressions: an evolution of anonymous methods providing improved type
inference and conversions to both delegate types and expression trees.
 Expression trees permit lambda expressions to be represented as data (expression trees)
instead of as code (delegates).
 Query expressions provide a language integrated syntax for queries that is similar to
relational and hierarchical query languages such as SQL and XQuery.
(C# Online.Net, 2011)
Appendix D
Integer types:







sbyte – 8-bit signed integer
short – 16-bit signed integer
int – 32-bit signed integer
long – 64-bit signed integer
byte – 8-bit unsigned integer
ushort – 16-bit unsigned integer
uint – 32-bit unsigned integer
C# - The Beautiful “Chord” of Computing
 ulong – 64-bit unsigned integer
(Wrox, 2010, p. 31)
Floating-point types:
 float – 32-bit single-precision floating point
 double – 64-bit double-precision floating point
(Wrox, 2010, p. 32)
Decimal type:
 decimal – 128-bit high-precision decimal notation
(Wrox, 2010, p. 32)
Boolean type:
 bool – represents true or false
(Wrox, 2010, p. 33)
Character type:
 char – represents a single 16-bit (Unicode) character
(Wrox, 2010, p. 33)
C# - The Beautiful “Chord” of Computing
References
C# Online.Net. (2011). C# Overview. Retrieved 9 11, 2011, from csharp-online.net: http://en.csharponline.net/CSharp_Overview
CSharpHelp. (2006, 4 30). Writing Expressions in C#. Retrieved 10 24, 2011, from CSharpOnline.com:
http://www.csharphelp.com/2006/04/writing-c-expressions/
Dutta, D. (2002, 3 13). Event Handling in .NET using C#. Retrieved 10 19, 2011, from csharpcorner.com: http://www.csharpcorner.com/UploadFile/ddutta/EventHandlingInNetUsingCS11092005052726AM/EventHa
ndlingInNetUsingCS.aspx
Microsoft, Inc. (2011). .NET Framework Conceptual Overview. Retrieved 10 5, 2011, from MSDN:
http://msdn.microsoft.com/library/zw4w595w(VS.100).aspx
Microsoft, Inc. (2011). Assignment Statements. Retrieved 10 20, 2011, from MSDN:
http://msdn.microsoft.com/en-us/library/z2wkh0tk(v=VS.90)
Microsoft, Inc. (2011). Exceptions and Exception Handling (C# Programming Guide). Retrieved 10 21,
2011, from MSDN: http://msdn.microsoft.com/en-us/library/ms173160(v=VS.100).aspx
Microsoft, Inc. (2011). internal (C# Reference). Retrieved 10 20, 2011, from MSDN:
http://msdn.microsoft.com/en-us/library/7c5ka91b.aspx
Microsoft, Inc. (2011). Methods (C# Programming Guide). Retrieved 10 23, 2011, from MSDN:
http://msdn.microsoft.com/en-us/library/ms173114(v=VS.100).aspx
Microsoft, Inc. (2011). private (C# Reference). Retrieved 10 20, 2011, from MSDN:
http://msdn.microsoft.com/en-us/library/st6sy9xe.aspx
Microsoft, Inc. (2011). protected (C# Reference). Retrieved 10 20, 2011, from MSDN:
http://msdn.microsoft.com/en-us/library/bcd5672a.aspx
Microsoft, Inc. (2011). public (C# Reference). Retrieved 10 20, 2011, from MSDN:
http://msdn.microsoft.com/en-us/library/yzh058ae.aspx
Microsoft, Inc. (2011). try-finally (C# Reference). Retrieved 10 21, 2011, from MSDN:
http://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx
C# - The Beautiful “Chord” of Computing
Microsoft, Inc. (2011). var (C# Reference). Retrieved 10 22, 2011, from MSDN:
http://msdn.microsoft.com/en-us/library/bb383973.aspx
Microsoft, Inc. (2011). Visual Studio 2010. Retrieved 10 25, 2011, from Microsoft.com:
http://www.microsoftstore.com/store/msstore/list/categoryID.50804700?WT.mc_id=pointitsem_
US_Bing_5VisualStudio_buy&wt.term=visual%20studio%202010%20prices&wt.campaign=5++Visual+Studio&wt.content=w8PBPH7A&wt.source=bing&wt.medium=cpc&WT.srch=1
Wikipedia. (2011, 10 17). .NET Framework. Retrieved 10 20, 2011, from Wikipedia:
http://en.wikipedia.org/wiki/.NET_Framework
Wikipedia. (2011, 10 15). C Sharp (programming language). Retrieved 10 20, 2011, from
Wikipedia.com: http://en.wikipedia.org/wiki/C_Sharp_(programming_language)
Wrox. (2010). Professional C# and .NET 4. Indianapolis: Wiley Publishing, Inc.
Zahn, M. (2003, 3 20). Naming Conventions for .NET / C# Projects . Retrieved 10 20, 2011, from
Akadia.com: http://www.akadia.com/services/naming_conventions.html
McCarthy, J.; Brayton, R.; Edwards, D.; Fox, P.; Hodes, L.; Luckham, D.; Maling, K.; Park, D. et al.
(March 1960). LISP I Programmers Manual. Boston, Massachusetts: Artificial Intelligence
Group, M.I.T. Computation Center and Research Laboratory. p. 88f.
http://history.siam.org/sup/Fox_1960_LISP.pdf. "In the local M.I.T. patois, association lists [of
atomic symbols] are also referred to as "property lists", and atomic symbols are sometimes called
"objects"."
Download