C# Tutorial

C# Tutorial C# First Application C# Variables C# Data Types C# Operators C# Keywords

C# Control Statement

C# If Statements C# Switch Statements C# for Loop C# While Loop C# do While loop C# Jump Statements C# Function C# functions with out variable

C# Arrays

C# Arrays

C# Function

C# Function call by value C# Call by reference C# Passing array to function C# Multidimensional Arrays C# Jagged Arrays C# Params C# Array Class C# Command Line Arguments

C# Object Class

C# Object and Classes C# Constructors C# Destructor C# this Keyword C# static field C# static class C# Static Constructor C# Structs C# enum C# Properties

C# Inheritance

C# Inheritance C# Multilevel Inheritance C# Aggregation C# Member overloading C# Method Overriding C# Base

C# Polymorphism

C# Polymorphism C# Sealed

C# Abstraction

C# Abstraction C# Interface

C# Namespace

C# Namespace C# Access Modifiers C# Encapsulation

C# Strings

C# String

C# Misc

C# Design Patterns Dictionary in C# Boxing and Unboxing in C# Ref and Out in C# Serialization in C# Dispose and Finalize in C# CONSOLE LOG IN C# Get File extension in C# Insert query in c# Difference Between List and Dictionary in C# Getters and Setters in C# Extension Methods in C# Insert query in c# CONSOLE LOG IN C# Get File extension in C# Random.NextDouble() Method in C# Binary Search in C# Difference between Delegates and Interfaces in C# Double.IsFinite() Method in C# Index Constructor in C# Abstraction in C# Basic OOPS Concepts In C# Queue.CopyTo() Method in C# single.compareto() method in C# C# Throw Exception in Constructor DECODE IN C# file.setlastwritetimeutc() method in C# Convert Object to List in C# convert.ToSByte(string, IFormatProvider) Method in C# C# Declare Delegate in Interface console.TreatControl C As Input property in C# Copying the queue elements to 1-D Array in C# Array.Constrainedcopy() Method in C# C# in and out Char.IsLetterOrDigit() method in C# Debugging in C# decimal.compare() method in C# Difference between Console.Read and Console.Readline in C# Metadata in C# C# Event Handler Example Default Interface Methods in C# Difference between hashtable and dictionary in C# C# program to implement IDisposable Interface Encapsulation in C# SortedList.IndexOfVaalue(Object) Method in C# Hash Maps in C# How to clear text files in C# How to Convert xls to xlsx in C# Foreach loop in C# FIFO in C# How to handle null exception in C# Type.Is Instance Of Type() Method in C# How to add data into MySQL database using C# How to use angular js in ASP net Csharp decimal.compare() method in Csharp Difference between Console.Read and Console.Readline in Csharp How to Implement Interface in Csharp char.IsUpper() Method in C# Index Of Any() Method in C# Quantifiers in C# C# program to Get Extension of a Given File C# Error Logging C# ENCRIPTION Can we create an object for Abstract Class in C# Console.CursorVisible in C# SortedDictionary Implementation in C# C# Hash Table with Examples Setting the Location of the Label in c# Collections in c# Virtual Keyword in C# Reverse of string in C# String and StringBuilder in C# Encapsulation in C# SortedList.IndexOfVaalue(Object) Method in C# Hash Maps in C# How to clear text files in C# How to Convert xls to xlsx in C# Foreach loop in C# FIFO in C# How to handle null exception in C# Type.Is Instance Of Type() Method in C# How to add data into MySQL database using C# How to use angular js in ASP net Csharp decimal.compare() method in Csharp Difference between Console.Read and Console.Readline in Csharp How to Implement Interface in Csharp char.IsUpper() Method in C# Index Of Any() Method in C# Quantifiers in C# C# program to Get Extension of a Given File Difference between ref and out in C# Singleton Class in C# Const And Readonly In Csharp BinaryReader and BinaryWriter in C# C# Attributes C# Delegates DirectoryInfo Class in C# Export and Import Excel Data in C# File Class in C# FileInfo Class in C# How to Cancel Parallel Operations in C#? Maximum Degree of Parallelism in C# Parallel Foreach Loop in C# Parallel Invoke in C# StreamReader and StreamWriter in C# TextReader and TextWriter in C# AsQueryable() in C# Basic Database Operations Using C# C# Anonymous Methods C# Events C# Generics C# Indexers C# Multidimensional Indexers C# Multithreading C# New Features C# Overloading of Indexers Difference between delegates and events in C# Operator overloading in C# Filter table in C# C# Queue with Examples C# Sortedlist With Examples C# Stack with Examples C# Unsafe Code File Handling in C# HashSet in C# with Examples List Implementation in C# SortedSet in C# with Examples C# in Depth Delegates and Events in C# Finally Block in C# How to Split String in C# Loggers in C# Nullable Types in C# REVERSE A STRING IN C# TYPE CASTING IN C# What is Generics in C# ABSTRACT CLASS IN C# Application of pointer in C# Await in c# READONLY AND CONSTANT IN C# Type safe in C# Types of Variables in c# Use of delegates in c# ABSTRACT CLASS IN C# Application of pointer in C# Await in c# READONLY AND CONSTANT IN C# Type safe in C# Types of Variables in c# Use of delegates in c# ABSTRACT CLASS IN C# Application of pointer in C# Await in c# READONLY AND CONSTANT IN C# Type safe in C# Types of Variables in c# Use of delegates in c# Atomic Methods Thread Safety and Race Conditions in C# Parallel LINQ in C# Design Principles in C# Difference Between Struct And Class In C# Difference between Abstraction and Encapsulation in C# Escape Sequence Characters in C# What is IOC in C# Multiple Catch blocks in C# Appdomain in C# Call back methods in C# Change Datetime format in C# Declare String array in C# Default Access Specifier in c# Foreach in LINQ C# How to compare two lists in C# How to Convert String to Datetime in c# How to get only Date from DateTime in C# Ispostback in asp net C# JSON OBJECT IN C# JSON STRINGIFY IN C# LAMBDA FUNCTION IN C# LINQ Lambda Expression in C# Microservices in C# MSIL IN C# Reference parameter in C# Shadowing(Method hiding) in C# Solid principles in C# Static Members in C# Task run in C# Transaction scope in C# Type Conversion in c# Unit of Work in C# Unit Test Cases in c# User Defined Exception in c# Using Keyword in C# Var Keyword in C# What is gac in C#

Virtual Keyword in C#

In object-orientated programming, the ability to lay out flexible and extensible software is paramount. The C# programming language, developed through Microsoft, provides several capabilities to attain this aim. One such function is the "virtual" Keyword, which enables polymorphism and dynamic dispatch, permitting builders to write code that adapts to changing necessities.

Understanding the "virtual" Keyword:

In C#, the "virtual" Keyword is used to modify a way, property, or indexer assertion. When a way is asserted as digital, the technique can be overridden in derived lessons. This way, subclasses can provide their personal implementation of the approach, changing the conduct described within the base class.

The Keyword is placed before the method signature in the base class to declare a method as virtual. For example:

using System;

public class Shape

{

    public virtual double CalculateArea()

    {

        return 0;

    }

}

public class Rectangle : Shape

{

    private double length;

    private double width;

    public Rectangle(double length, double width)

    {

this.length = length;

this.width = width;

    }

    public override double CalculateArea()

    {

        return length * width;

    }

}

public class Circle : Shape

{

    private double radius;

    public Circle(double radius)

    {

this.radius = radius;

    }

    public override double CalculateArea()

    {

        return Math.PI * Math.Pow(radius, 2);

    }

}

public class Program

{

    public static void Main(string[] args)

    {

        Shape rectangle = new Rectangle(5, 3);

        Shape circle = new Circle(2.5);

Console.WriteLine("Area of rectangle: " + rectangle.CalculateArea());

Console.WriteLine("Area of circle: " + circle.CalculateArea());

    }

}

Output:

Explanation:

In this example, we have a base class called Shape, which has a virtual method CalculateArea(). The CalculateArea() method is declared as virtual because we anticipate that derived classes might provide their implementation.

Create two derived classes:

Rectangle and Circle, which inherit from the Shape base class. Each derived class overrides the CalculateArea() method with its implementation to calculate the area specific to its Shape.

In the Main method, we create instances of the Rectangle and Circle classes and assign them to variables of type Shape. It demonstrates polymorphism, where objects of different types can be treated as instances of a common base type.

Finally, we call the CalculateArea() method on both objects, and the appropriate overridden method is dynamically dispatched based on the actual type of the objects at runtime. The calculated areas of the rectangle and circle are then printed to the console.

When using the "virtual" Keyword, it is essential to consider a few best practices to ensure code maintainability and correctness.

  1. Only mark methods as virtual when necessary: Overusing the "virtual" Keyword can lead to unnecessarily complex code. Only use it when you anticipate the need for subclasses to provide different implementations.
  2. Avoid coupling between base and derived classes: The base class should not rely on specific behavior from the derived classes. It ensures loose coupling and promotes better design.
  3. Document the intended behavior: Document the expected behavior of virtual methods in the base class documentation to guide derived class implementations.
  4. Follow naming conventions: When overriding a virtual method, it is recommended to use the "override" keyword and follow naming conventions to enhance code readability and maintainability.

The use of the "virtual" Keyword in C# brings numerous benefits to software program development:

Extensibility: By marking techniques as virtual, developers create a foundation for destiny extensions. Derived classes can override these techniques to alter or increase the conduct defined in the base elegance without editing the unique implementation. It promotes code reuse and permits the introduction of recent functionalities while retaining compatibility with current code.

Polymorphism: The "digital" Keyword allows polymorphism, a fundamental principle in item-oriented programming. Polymorphism allows items of different sorts to be treated as times of a common place base kind, facilitating code reuse, abstraction, and versatility in handling unusual item behaviors.

Dynamic dispatch: The "digital" Keyword, in mixture with the "override" keyword in derived training, helps dynamic dispatch. This approach that the perfect approach implementation is determined at runtime primarily based on the actual type of the object. Dynamic dispatch enhances the flexibility and flexibility of code, allowing it to respond to modifications inside the item hierarchy during runtime.

Testability: The use of virtual techniques makes it less complicated to write down unit exams and perform mocking and stubbing in check scenarios. By growing derived lessons that override the virtual techniques with test-unique implementations, developers can isolate and look at particular behaviors without interfering with the original codebase.

The "virtual" Keyword in C# is a powerful tool for achieving flexibility, code reuse, and extensibility in object-oriented programming. By declaring methods as virtual, developers unlock the potential for derived classes to override and extend the behavior defined in the base class. It promotes polymorphism and dynamic dispatch, enabling code to adapt to changing requirements and allowing objects of different types to be treated as instances of a common base type.rk circle inside of a slightly less dark circle.

← Prev Next →