C# Essentials Tutorial

Welcome to the C# Essentials tutorial. This guide covers the fundamental concepts of the C# programming language, designed for beginners looking to build a strong foundation.

Introduction to C#

C# (pronounced "C sharp") is a modern, object-oriented programming language developed by Microsoft. It runs on the .NET framework and is widely used for developing a variety of applications, including desktop applications, web services, and games.

Key features of C# include:

  • Type-safe: Helps prevent common programming errors.
  • Object-oriented: Based on concepts like encapsulation, inheritance, and polymorphism.
  • Component-oriented: Encourages modular development.
  • Versatile: Can be used for a broad range of application types.

To start coding in C#, you'll typically need a development environment like Visual Studio or Visual Studio Code, along with the .NET SDK.

Variables and Data Types

Variables are used to store data. In C#, you must declare a variable's type before you can use it. Common built-in data types include:

  • int: For whole numbers (e.g., 10, -5).
  • double: For floating-point numbers (e.g., 3.14, -0.5).
  • bool: For boolean values (true or false).
  • string: For sequences of characters (e.g., "Hello, World!").
  • char: For single characters (e.g., 'A', '7').

Example:

int age = 30; string name = "Alice"; double pi = 3.14159; bool isStudent = false;

You can also use the var keyword for implicit typing, where the compiler infers the type from the assigned value.

var message = "Learning C#"; // message is inferred as string var count = 100; // count is inferred as int

Operators

Operators perform operations on variables and values. C# supports various operators:

Arithmetic Operators

  • + (Addition)
  • - (Subtraction)
  • * (Multiplication)
  • / (Division)
  • % (Modulo - returns the remainder)

Comparison Operators

  • == (Equal to)
  • != (Not equal to)
  • > (Greater than)
  • < (Less than)
  • >= (Greater than or equal to)
  • <= (Less than or equal to)

Logical Operators

  • && (Logical AND)
  • || (Logical OR)
  • ! (Logical NOT)

Example:

int a = 10; int b = 5; int sum = a + b; // sum is 15 bool isEqual = (a == b); // isEqual is false

Control Flow (if, else, loops)

Control flow statements allow you to execute code conditionally or repeatedly.

if, else if, else

Used to execute blocks of code based on conditions.

int temperature = 25; if (temperature > 30) { Console.WriteLine("It's hot!"); } else if (temperature > 20) { Console.WriteLine("It's warm."); } else { Console.WriteLine("It's cool."); }

Loops (for, while, foreach)

Used to repeat a block of code multiple times.

for loop

for (int i = 0; i < 5; i++) { Console.WriteLine("Iteration: " + i); }

while loop

int count = 0; while (count < 3) { Console.WriteLine("While loop: " + count); count++; }

foreach loop

Used to iterate over collections.

string[] fruits = { "Apple", "Banana", "Cherry" }; foreach (string fruit in fruits) { Console.WriteLine(fruit); }

Methods

Methods (also known as functions or subroutines) are blocks of code that perform a specific task. They help organize code and make it reusable.

Syntax:

[access_modifier] [return_type] MethodName([parameters]) { // Method body return some_value; // if return_type is not void }

Example:

public static int Add(int num1, int num2) { return num1 + num2; } public static void Greet(string name) { Console.WriteLine("Hello, " + name + "!"); } // Calling methods: int result = Add(5, 3); // result is 8 Greet("Bob"); // Prints "Hello, Bob!"

Classes and Objects

C# is an object-oriented language. A class is a blueprint for creating objects. An object is an instance of a class.

A class typically contains fields (data members) and methods (member functions).

Example:

public class Car { // Fields public string Model; public int Year; // Constructor public Car(string model, int year) { Model = model; Year = year; } // Method public void DisplayInfo() { Console.WriteLine($"Car: {Year} {Model}"); } } // Creating and using an object: Car myCar = new Car("Toyota Camry", 2022); myCar.DisplayInfo(); // Output: Car: 2022 Toyota Camry

Collections

Collections are used to store groups of objects. The System.Collections.Generic namespace provides powerful generic collection types.

List<T>

A dynamic array that can grow or shrink.

using System.Collections.Generic; var numbers = new List<int>(); numbers.Add(1); numbers.Add(2); numbers.Add(3); Console.WriteLine(numbers[0]); // Output: 1 foreach (int num in numbers) { Console.WriteLine(num); }

Dictionary<TKey, TValue>

A collection of key-value pairs.

using System.Collections.Generic; var capitals = new Dictionary<string, string>(); capitals["USA"] = "Washington D.C."; capitals["UK"] = "London"; Console.WriteLine(capitals["USA"]); // Output: Washington D.C.

Error Handling (Exceptions)

Exceptions are events that occur during execution that disrupt the normal flow of the program's instructions. C# uses the try-catch block for exception handling.

try { // Code that might throw an exception int[] numbers = { 1, 2 }; Console.WriteLine(numbers[5]); // This will throw an IndexOutOfRangeException } catch (IndexOutOfRangeException ex) { Console.WriteLine("Error: Index is out of bounds."); Console.WriteLine(ex.Message); } catch (Exception ex) { // Catches any other type of exception Console.WriteLine("An unexpected error occurred."); } finally { // Code that will always execute, regardless of exceptions Console.WriteLine("Cleanup operations."); }

The throw keyword can be used to manually raise an exception.