# Refresher/csharp

This is a refresher course for those who need to review basic knowledge of C# (csharp).

## Basic Concepts

* Comment styles: Single-line (//), multi-line (/* */) and XML documentation comments (///)
* delegate (function pointers in C++): an object encapsulates reference to a method
* HashTable: datatype allowing data retrieval by unique key
* Interface: an approach to multiple inheritance, contains only abstract members (events, methods, properties) and no constants, data fields, constructors, and destructors
* multicast delegate: a delegate that points to and eventually fires off several methods
* Three-tier: presentation (UI), business (logic and underlying code) and data (from storage or other sources) layers

## Basic Classes

* Debug vsTrace class: debug builds only or both debug and release builds
* Localization namespaces: System.Globalization and System.Resources
* System.Array.CopyTo vs System.Array.Clone: deep vs shallow copy of an array
* System.Text.StringBuilder over System.String: more efficient when a lot of manipulation is done to the text

## Basic Limitation

* System.Array: cannot store multiple data type

## Basic Operations

* ACID rule of thumb for transactions: Transaction must be Atomic (independent off other transactions), Consistent (committed or roll back), Isolated (other transactions cannot see intermediate results), Durable (values persist if committed)
* ASP.NET Web application debugging: attach the aspnet_wp.exe process to the DbgClr debugger
* Assembly deployment: MSI installer, CAB archive, and XCOPY command
* Descending sorting: by calling Sort and then Reverse methods
* Immediate window in VS.IDE: change value of a variable while debugging a C# application
* Test cases in unit testing: Positive, negative and exception
* try { control transfer only after finally block executed } catch (Exception ex) { } finally { executed if no exceptions but exceptions herein are not handled }

## Authentication

* SQL Server authentication: untrusted as username and password are not checked with the Active Directory
* Windows Authentication: trusted as username and password are checked with the Active Directory

## Database

* Initial Catalog: name of wanted database in a Connection String

## Accessibility Modifiers

* Class inheritance: colon + base class
* Private class-level variables: inherited but not accessible
* Value: keyword for implicit input name of the set method in object classes
* Protected class-level variables: available to classes in the same namespace
* Protected internal: available to derived classes, and classes within the same Assembly, and the base class
* Default constructor: disappears when any constructor is written
* System.Object: top .NET class that everything is derived from
* Method overriding: changing the method behavior for a derived class
* Virtual method: can be over-ridden but cannot change method signature
* Sealed class (in Java, final class): cannot be inherited
* Sealed method: method cannot be inherited but class can when not sealed
* Abstract class methods: not all must be abstract, some can be concrete
* Abstract class required when at least one of the methods in the class is abstract
* Abstract method: require non-abstract derived classes to provide their own implementation of this method
* Interface class? an abstract class with public abstract methods all of which must be implemented in the inherited classes
* Interface class methods: all must be abstract and public and thus accessibility modifiers not needed
* Multiple interfaces: can be inherited
* Namespace class: classes are declared inside a namespace

## Delegates How and When

* Delegate: a class -- usable if declared and instantiated
* Delegate use: passed around as a parameter, and invoked by the receiving object
* Delegate example 1: success = MyAddressProvider.HandleCampaign(WhatToDoWithAddresses)
* Delegate example 2: MyMenuItem.Click += new System.Windows.RoutedEventHandlerMyMenuItem_Click)

## Singleton

* Singleton design pattern: interface allowing a class to enforce single instantiation
* C# singleton example: http://www.dotnetperls.com/singleton