Hi,
This are copy notes from the main key-points found in the MS 70-483 prep book. This might be useful to someone. A checklist of things in C#.
Also check out the exam link and the actual book:
http://www.microsoft.com/learning/en-us/exam-70-483.aspx
Exam Ref 70-483: Programming in C#
Implement multithreading and asynchronous processing |
Using multiple threads can improve responsiveness and enables you to make use of multiple processors. |
The Thread class can be used if you want to create your own threads explicitly. Otherwise, you can use the ThreadPool to queue work and let the runtime handle things. |
A Task object encapsulates a job that needs to be executed. Tasks are the recommended way to create multithreaded code. |
The Parallel class can be used to run code in parallel. |
PLINQ is an extension to LINQ to run queries in parallel. |
The new async and await operators can be used to write asynchronous code more easily. |
Concurrent collections can be used to safely work with data in a multithreaded (concurrent access) environment. |
Manage multithreading |
When accessing shared data in a multithreaded environment, you need to synchronize |
access to avoid errors or corrupted data. |
Use the lock statement on a private object to synchronize access to a piece of code. |
You can use the Interlocked class to execute simple atomic operations. |
You can cancel tasks by using the CancellationTokenSource class with a |
CancellationToken. |
Implement program flow |
Boolean expressions can use several operators: ==, !=, <, >, <=, >=, !. Those operators |
can be combined together by using AND (&&), OR (||) and XOR (^). |
You can use the if-else statement to execute code depending on a specific condition. |
The switch statement can be used when matching a value against a couple of options. |
56 Chapter 1 Manage program flow |
The for loop can be used when iterating over a collection where you know the number of iterations in advance. |
A while loop can be used to execute some code while a condition is true; do-while should be used when the code should be executed at least once. |
foreach can be used to iterate over collections. |
Jump statements such as break, goto, and continue can be used to transfer control to another line of the program. |
Create and implement events and callbacks method |
Delegates can be instantiated, passed around, and invoked. |
Lambda expressions, also known as anonymous methods, use the => operator and |
form a compact way of creating inline methods. |
Events are a layer of syntactic sugar on top of delegates to easily implement the |
publish-subscribe pattern. |
Events can be raised only from the declaring class. Users of events can only remove |
and add methods the invocation list. |
You can customize events by adding a custom event accessor and by directly using the |
underlying delegate type. |
Implement exception handling |
In the .NET Framework, you should use exceptions to report errors instead of error |
codes. |
Exceptions are objects that contain data about the reason for the exception. |
You can use a try block with one or more catch blocks to handle different types of |
exceptions. |
You can use a finally block to specify code that should always run after, whether or not |
an exception occurred. |
You can use the throw keyword to raise an exception. |
You can define your own custom exceptions when you are sure that users of your code |
will handle it in a different way. Otherwise, you should use the standard .NET Framework |
exceptions. |
Create types |
Types in C# can be a value or a reference type. |
Generic types use a type parameter to make the code more flexible. |
Constructors, methods, properties, fields, and indexer properties can be used to create |
a type. |
Optional and named parameters can be used when creating and calling methods. |
Overloading methods enable a method to accept different parameters. |
Extension methods can be used to add new functionality to an existing type. |
Overriding enables you to redefine functionality from a base class in a derived class. |
Consume types |
Boxing occurs when a value type is treated as a reference type. |
When converting between types, you can have an implicit or an explicit conversion. |
An explicit conversion is called casting and requires special syntax. |
You can create your own implicit and explicit user-defined conversions. |
The .NET Framework offers several helper methods for converting types. |
The dynamic keyword can be used to ease the static typing of C# and to improve |
interoperability with other languages. |
Enforce encapsulation |
Encapsulation is important in object-oriented software. It hides internal details and |
improves the usability of a type. |
Data can be encapsulated with a property. |
Properties can have both a get and a set accessor that can run additional code, commonly |
known as getters and setters. |
Types and type elements can have access modifiers to restrict accessibility. |
The access modifiers are public, internal, protected, protected, internal, and private. |
Explicit interface implementation can be used to hide information or to implement |
interfaces with duplicate member signatures. |
Create and implement a class hierarchy |
Inheritance is the process in which a class is derived from another class or from an interface. |
An interface specifies the public elements that a type must implement. |
A class can implement multiple interfaces. |
A base class can mark methods as virtual; a derived class can then override those methods to add or replace behavior. |
A class can be marked as abstract so it can’t be instantiated and can function only as a base class. |
A class can be marked as sealed so it can’t be inherited. |
The .NET Framework offers default interfaces such as IComparable, IEnumerable, IDisposable and IUnknown. |
Find, execute, and create types at runtime by using reflection |
A C# assembly stores both code and metadata. |
Attributes are a type of metadata that can be applied in code and queried at runtime. |
Reflection is the process of inspecting the metadata of a C# application. |
Through reflection you can create types, call methods, read properties, and so forth. |
The CodeDOM can be used to create a compilation unit at runtime. It can be compiled or converted to a source file. |
Expression trees describe a piece of code. They can be translated to something else (for example, SQL) or they can be compiled and executed. |
Manage the object life cycle |
Memory in C# consists of both the stack and the heap. |
The heap is managed by the garbage collector. |
The garbage collector frees any memory that is not referenced any more. |
A finalizer is a special piece of code that’s run by the garbage collector when it removes |
an object. |
IDisposable can be implemented to free any unmanaged resources in a deterministic |
way. |
Objects implementing IDisposable can be used with a using statement to make sure |
they are always freed. |
A WeakReference can be used to maintain a reference to items that can be garbage |
collected when necessary. |
Manipulate strings |
A string is an immutable reference type. |
When doing a lot of string manipulations, you should use a StringBuilder. |
The String class offers a lot of methods for dealing with strings like IndexOf, LastIndexOf, StartsWith, EndsWith, and Substring. |
Strings can be enumerated as a collection of characters. |
Formatting is the process of displaying an object as a string. |
You can use format strings to change how an object is converted to a string. |
You can implement formatting for your own types. |
Validate application input |
Validating application input is important to protect your application against both |
mistakes and attacks. |
Data integrity should be managed both by your application and your data store. |
The Parse, TryParse, and Convert functions can be used to convert between types. |
Regular expressions, or regex, can be used to match input against a specified pattern |
or replace specified characters with other values. |
When receiving JSON and XML files, it’s important to validate them using the built-in |
types, such as with JavaScriptSerializer and XML Schemas. |
Perform symmetric and asymmetric |
encryption |
An asymmetric algorithm uses a public and private key that are mathematically linked. |
Hashing is the process of converting a large amount of data to a smaller hash code. |
Digital certificates can be used to verify the authenticity of an author. |
CAS are used to restrict the resources and operations an application can access and |
execute. |
System.Security.SecureString can be used to keep sensitive string data in memory. |
Manage assemblies |
An assembly is a compiled unit of code that contains metadata. |
An assembly can be strongly signed to make sure that no one can tamper with the content. |
Signed assemblies can be put in the GAC. |
An assembly can be versioned, and applications will use the assembly version they were developed with. It’s possible to use configuration files to change these bindings. |
A WinMD assembly is a special type of assembly that is used by WinRT to map non-native languages to the native WinRT components. |
Debug an application |
Visual Studio build configurations can be used to configure the compiler. |
A debug build outputs a nonoptimized version of the code that contains extra instructions |
to help debugging. |
A release build outputs optimized code that can be deployed to a production |
environment. |
Compiler directives can be used to give extra instructions to the compiler. You can use |
them, for example, to include code only in certain build configurations or to suppress |
certain warnings. |
A program database (PDB) file contains extra information that is required when debugging |
an application. |
Implement diagnostics in an application |
Logging and tracing are important to monitor an application that is in production and |
should be implemented right from the start. |
You can use the Debug and TraceSource classes to log and trace messages. By configuring |
different listeners, you can configure your application to know which data to send |
where. |
When you are experiencing performance problems, you can profile your application to |
find the root cause and fix it. |
Performance counters can be used to constantly monitor the health of your applications. |
Perform I/O operations |
You can work with drives by using Drive and DriveInfo. |
For folders, you can use Directory and DirectoryInfo. |
File and FileInfo offer methods to work with files. |
The static Path class can help you in creating and parsing file paths. |
Streams are an abstract way of working with a series of bytes. |
There are many Stream implementations for dealing with files, network operations, |
and any other types of I/O. |
Remember that the file system can be accessed and changed by multiple users at the |
same time. You need to keep this in mind when creating reliable applications. |
When performing network requests, you can use the WebRequest and WebResponse |
classes from the System.Net namespace. |
Asynchronous I/O can help you create a better user experience and a more scalable |
application. |
Consume data |
ADO.NET uses a provider model that enables you to connect to different types of |
databases. |
You use a DbConnection object to create a connection to a database. |
You can execute queries that create, update, read, and delete (CRUD) data from a |
database. |
When creating queries it’s important to use parameterized queries so you avoid SQL |
injection. |
Objective 4.3: Query and manipulate data and objects by using LINQ CHAPTER 4 291 |
You can consume a web service from your application by creating a proxy for it. |
You can work with XML by using the XmlReader, XmlWriter, XPathNavigator, and XmlDocument classes. |
Query and manipulate data and objects by using LINQ |
LINQ, which stands for Language Integrated Query, is a uniform way of writing queries |
against multiple data sources. |
Important language features when working with LINQ queries are implicit typing, object |
initialization syntax, lambdas, extension methods, and anonymous types. |
You can use LINQ with a method-based syntax and the query syntax. |
LINQ queries are deferred-execution, which means that the query executes when it is |
first iterated. |
You can use LINQ to XML to query, create, and update XML. |
Serialize and deserialize data |
Serialization is the process of transforming an object to a flat file or a series of bytes. |
Deserialization takes a series of bytes or a flat file and transforms it into an object. |
XML serialization can be done by using the XmlSerializer. |
You can use special attributes to configure the XmlSerializer. |
Binary serialization can be done by using the BinaryFormatter class. |
WCF uses another type of serialization that is performed by the DataContractSerializer. |
JSON is a compact text format that can be created by using the DataContractJsonSerializer. |
Store data in and retrieve data from collections |
The .NET Framework offers both generic and nongeneric collections. When possible, |
you should use the generic version. |
Array is the most basic type to store a number of items. It has a fixed size. |
List is a collection that can grow when needed. It’s the most-used collection. |
Dictionary stores and accesses items using key/value pairs. |
HashSet stores unique items and offers set operations that can be used on them. |
A Queue is a first-in, first-out (FIFO) collection. |
A Stack is a first-in, last-out (FILO) collection. |
You can create a custom collection by inheriting from a collection class or inheriting |
from one of the collection interfaces. |