C# (C Sharp)
C# (C Sharp)
C# Introduction
Design goals
The language is intended for use in developing software components
that can take advantage of distributed environments
Programmer portability is very important, 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
regards to memory and processing power requirements, the
language was not intended to compete directly on performance and
size with C or assembly language
C#'s principal designer and lead architect at Microsoft is
Anders Hejlsberg
His previous experience in programming language and framework
design (Visual J++, Borland Delphi, Turbo Pascal) can be readily
seen in the syntax of the C# language, as well as throughout the
Common Language Runtime (CLR) core
Architectural history
C# differs from C and C++ in many ways, including:
There are no global variables or functions. All methods and
members must be declared within classes
Local variables cannot shadow variables of the enclosing block,
unlike C and C++. Variable shadowing is often considered
confusing by C++ texts
C# supports a strict boolean type, bool. Statements that take
conditions, such as while and if, require an expression of a
boolean type. While C++ also has a boolean type, it can be freely
converted to and from integers, and expressions such as if(a)
require only that a is convertible to bool, allowing a to be an int,
or a pointer
C# disallows this 'integer meaning true or false' approach on the
grounds that forcing programmers to use expressions that return
exactly bool prevents certain types of programming mistakes
Features
In C#, pointers can only be used within blocks specifically marked
as unsafe, and programs with unsafe code need appropriate
permissions to run. Most object access is done through safe
references, which cannot be made invalid. An unsafe pointer can
point to an instance of a value-type, array, string, or a block of
memory allocated on a stack. Code that is not marked as unsafe
can still store and manipulate pointers through the System.IntPtr
type, but cannot dereference them
Managed memory cannot be explicitly freed, but is automatically
garbage collected. Garbage collection addresses memory leaks.
C# also provides direct support for deterministic finalization with
the using statement (supporting the
Resource Acquisition Is Initialization idiom)
Multiple inheritance is not supported, although a class can
implement any number of interfaces. This was a design decision
by the language's lead architect to avoid complication, avoid
dependency hell and simplify architectural requirements
throughout CLI
THANK YOU