---
title: "Keywords in C#"  
description: "In this blog is m trying to explain the concept of keywords"  
author: "Vijay Shukla"  
published: 2013-06-24  
updated: 2017-11-30  
canonical: https://www.mindstick.com/articles/1358/keywords-in-c-sharp  
category: "c#"  
tags: ["c#"]  
reading_time: 14 minutes  

---

# Keywords in C#

In this blog is m trying to [explain the concept](https://www.mindstick.com/forum/158822/explain-the-concept-of-abstract-classes-and-their-significance-in-oop) of keywords\

Keywords are predefined, keyword have special meanings to the compiler. They cannot be used as identifiers in your program unless they include @ as a prefix. For example, @while is a valid identifier but if is not because while is a keyword.

The first table in this topic lists keywords that are reserved identifiers in any part of a C# program.

| abstract | The **abstract** modifier indicates that the thing being modified has a missing or incomplete implementation. The abstract modifier can be used with classes, methods, properties, indexers, and events. |
| --- | --- |
| as | You can use the **as** operator to perform certain types of conversions between compatible reference types or null able types. |
| base | The **base** keyword is used to access members of the base class from within a derived class. |
| bool | The **bool** keyword is an alias of **System.Boolean**. It is used to declare variables to store the Boolean values, true and false. |
| break | The **break** statement terminates the closest enclosing loop or [switch statement](https://www.mindstick.com/articles/720/php-switch-statement) in which it appears. Control is passed to the statement that follows the terminated statement, if any. |
| byte | The **byte** keyword denotes an integral type that stores values as indicated in the following table. |
| case | The case switch statement is a control statement that selects a switch section to execute from a list of candidates. |
| catch | The **try-catch** statement consists of a try block followed by one or more catch clauses, which specify handlers for different exceptions. |
| char | The **char** keyword is used to declare an instance of the System.Char structure that the .NET Framework uses to represent a Unicode character. The value of a Char object is a 16-bit numeric (ordinal) value. |
| checked | The **checked** keyword is used to explicitly enable overflow checking for integral-type arithmetic operations and conversions. |
| class | Classes are declared using the keyword **class**. |
| const | The **const** keyword is used to modify a declaration of a field or local variable. It specifies that the value of the field or the local variable is constant, which means it cannot be modified |
| continue | The **continue** statement passes control to the next iteration of the enclosing while, do, for, or foreach statement in which it appears. |
| decimal | The **decimal** keyword indicates a 128-bit data type. Compared to floating-point types, the decimal type has more precision and a smaller range, which makes it appropriate for financial and monetary calculations. |
| default | The **default** keyword can be used in the switch statement or in generic code: <![if !supportLists]> · <![endif]>The switch statement: Specifies the default label. <![if !supportLists]> · <![endif]>Generic code: Specifies the default value of the type parameter. This will be null for reference types and zero for value types. |
| delegate | The declaration of a **delegate** type is similar to a method signature. It has a return value and any number of parameters of any type |
| do | The **do** statement executes a statement or a block of statements repeatedly until a specified expression evaluates to false. The body of the loop must be enclosed in braces, {}, unless it consists of a single statement. In that case, the braces are optional. |
| double | The **double** keyword signifies a simple type that stores 64-bit floating-point values. The following table shows the precision and approximate range for the double type. |
| else | An **if statement** identifies which statement to run based on the value of a Boolean expression. In the following example, the Boolean variable result is set to true and then checked in the if statement. The output is The condition is true. |
| enum | The **enum** keyword is used to declare an enumeration, a distinct type that consists of a set of named constants called the enumerator list. |
| event | **Events** are a special kind of [multicast delegate](https://www.mindstick.com/forum/33936/use-of-multicast-delegate-in-c-sharp) that can only be invoked from within the class or struct where they are declared (the publisher class). |
| explicit | The **explicit** keyword declares a user-defined type conversion operator that must be invoked with a cast |
| extern | The **extern** modifier is used to declare a method that is implemented externally. A common use of the extern modifier is with the DllImport attribute when you are using Interop services to call into unmanaged code. |
| finally | By using a **finally** block, you can clean up any resources that are allocated in a try block, and you can run code even if an exception occurs in the try block. Typically, the statements of a finally block run when control leaves a try statement. The transfer of control can occur as a result of normal execution, of execution of a break, continue, goto, or return statement, or of propagation of an exception out of the try statement. |
| fixed | The **fixed** statement prevents the [garbage collector](https://www.mindstick.com/forum/155585/what-is-garbage-collector) from relocating a movable variable. The fixed statement is only permitted in an unsafe context. Fixed can also be used to create fixed size buffers. |
| float | The **float** keyword signifies a simple type that stores 32-bit floating-point values. The following table shows the precision and approximate range for the float type. |
| for | By using **for** loop, you can run a statement or a block of statements repeatedly until a specified expression evaluates to false. This kind of loop is useful for iterating over arrays and for other applications in which you know in advance how many times you want the loop to iterate. |
| foreach | The **foreach** statement is used to iterate through the collection to get the information that you want, but cannot be used to [add or remove](https://www.mindstick.com/forum/160320/how-you-can-check-if-an-element-exists-in-a-set-and-add-or-remove-elements-from-it) items from the source collection to avoid unpredictable side effects. If you need to add or remove items from the source collection, use a for loop. |
| goto | The **goto** statement transfers the program control directly to a labeled statement. |
| if | An **if** statement identifies which statement to run based on the value of a Boolean expression. In the following example, the Boolean variable result is set to true and then checked in the if statement. The output is The condition is true. |
| implicit | The **implicit** keyword is used to declare an implicit user-defined type conversion operator. Use it to enable implicit conversions between a user-defined type and another type, if the conversion is guaranteed not to cause a loss of data. |
| in (generic modifier) | For **generic type parameters**, the in keyword specifies that the type parameter is contra variant. You can use the in keyword in generic interfaces and delegates. |
| int | The **int** keyword denotes an integral type that stores values according to the size and range. |
| interface | An **interface** contains only the signatures of methods, properties, events or indexers. A class or struct that implements the interface must implement the members of the interface that are specified in the [interface definition](https://www.mindstick.com/forum/159908/how-to-pass-a-class-in-interface-definition). In the following example, class Implementation Class must implement a method named Sample Method that has no parameters and returns void. |
| internal | The **internal** keyword is an access modifier for types and type members. Internal types or members are accessible only within files in the same assembly. |
| is | Checks if an object **is** compatible with a given type. |
| lock | The **lock** keyword marks a statement block as a critical section by obtaining the mutual-exclusion lock for a given object, executing a statement, and then releasing the lock. The following example includes a lock statement. |
| long | The **long** keyword denotes an integral type that stores values according to the size and range. |
| namespace | The **namespace** keyword is used to declare a scope that contains a set of related objects. You can use a namespace to organize code elements and to create globally unique types. |
| new | In C#, the **new** keyword can be used as an operator, a modifier, or a constraint. <![if !supportLists]> · <![endif]> **new** Operator <![if !supportLists]> o <![endif]>Used to create objects and invoke constructors. <![if !supportLists]> · <![endif]> **new** Modifier <![if !supportLists]> o <![endif]>Used to hide an inherited member form a base class member. <![if !supportLists]> · <![endif]> **new** Constraint <![if !supportLists]> o <![endif]>Used to restrict types that might be used as arguments for a type parameter in a generic declaration. |
| null | The **null** keyword is a literal that represents a null reference, one that does not refer to any object. null is the default value of reference-type variables. Ordinary value types cannot be null. However, C# 2.0 introduced nullable value types. |
| object | The **object** type is an alias for Object in the .NET Framework. In the unified type system of C#, all types, predefined and user-defined, reference types and value types, inherit directly or indirectly from Object. You can assign values of any type to variables of type object. When a variable of a value type is converted to object, it is said to be boxed. When a variable of type object is converted to a value type, it is said to be unboxed. For more information. |
| operator | Use the **operator** keyword to overload a built-in operator or to provide a user-defined conversion in a class or struct declaration. |
| out | The **out** contextual keyword is used in two contexts: <![if !supportLists]> o <![endif]>As a parameter modifier in parameter lists <![if !supportLists]> o <![endif]>In generic type parameter declarations in interfaces and delegates |
| out (generic modifier) | For **generic type** parameters, the **out** keyword specifies that the type parameter is covariant. You can use the out keyword in generic interfaces and delegates. |
| override | The **override** modifier is required to extend or modify the abstract or virtual implementation of an inherited method, property, indexer, or event. |
| params | The **params** keyword lets you specify a [method parameter](https://www.mindstick.com/forum/155764/explain-action-method-parameter) that takes a variable number of arguments. |
| private | The **private** keyword is a member access modifier. Private access is the least permissive access level. Private members are accessible only within the body of the class or the struct in which they are declared. |
| protected | The **protected** keyword is a member access modifier. A protected member is accessible within its class and by derived class instances. For a comparison of protected with the other [access modifiers](https://www.mindstick.com/blog/11097/java-access-modifiers-the-public-and-the-private-modifiers). |
| public | The **public** keyword is an access modifier for types and type members. Public access is the most permissive access level. There are no restrictions on accessing public members. |
| readonly | The **readonly** keyword is a modifier that you can use on fields. When a field declaration includes a **readonly** modifier, assignments to the fields introduced by the declaration can only occur as part of the declaration or in a constructor in the same class. |
| ref | The **ref** keyword causes an argument to be passed by reference, not by value. The effect of passing by reference is that any change to the parameter in the method is reflected in the underlying argument variable in the calling method. The value of a reference parameter is always the same as the value of the underlying argument variable. |
| return | The **return** statement terminates execution of the method in which it appears and returns control to the calling method. It can also return an optional value. If the method is a void type, the return statement can be omitted. |
| sbyte | The **sbyte** keyword indicates an integral type that stores values according to the size and range. |
| sealed | When applied to a class, the **sealed** modifier prevents other classes from inheriting from it. |
| short | The **short** keyword denotes an integral data type that stores values according to the size and range. |
| sizeof | Used to obtain the size in bytes for an unmanaged type. Unmanaged types include the built-in types that are listed in the table that follows, and also the following: <![if !supportLists]> o <![endif]>Enum types <![if !supportLists]> o <![endif]>Pointer types <![if !supportLists]> o <![endif]>User-defined structs that do not contain any fields or properties that are reference types |
| stackalloc | The **stackalloc** keyword is used in an unsafe code context to allocate a block of memory on the stack. |
| static | Use the **static** modifier to declare a static member, which belongs to the type itself rather than to a specific object. The static modifier can be used with classes, fields, methods, properties, operators, events, and constructors, but it cannot be used with indexers, destructors, or types other than classes. |
| string | The **string** type represents a sequence of zero or more [Unicode characters](https://answers.mindstick.com/qa/35625/can-you-name-some-different-text-file-formats-for-storing-unicode-characters). string is an alias for String in the .NET Framework. |
| struct | A **struct** type is a value type that is typically used to encapsulate small groups of related variables, such as the coordinates of a rectangle or the characteristics of an item in an inventory. |
| switch | The **switch** statement is a control statement that selects a switch section to execute from a list of candidates. |
| this | The **this** keyword refers to the current instance of the class and is also used as a modifier of the first parameter of an [extension method](https://www.mindstick.com/articles/22/extension-method). |
| throw | The **throw** statement is used to signal the occurrence of an anomalous situation (exception) during the program execution. |
| true | Used as an overloaded operator or as a literal: <![if !supportLists]> o <![endif]> **true** Operator <![if !supportLists]> o <![endif]> **true** Literal |
| try | The try-catch statement consists of a try block followed by one or more catch clauses, which specify handlers for different exceptions. |
| typeof | Used to obtain the **System.Type** object for a type. A **typeof** expression takes the following form: ## System.Type type = typeof(int); |
| uint | The **uint** keyword signifies an integral type that stores values according to the size and range. |
| ulong | The **ulong** keyword denotes an integral type that stores values according to the size and range. |
| unchecked | The **unchecked** keyword is used to suppress overflow-checking for integral-type arithmetic operations and conversions. |
| unsafe | The **unsafe** keyword denotes an unsafe context, which is required for any operation involving pointers. |
| ushort | The **ushort** keyword indicates an integral data type that stores values according to the size and range. |
| using | The **using** keyword has two major uses: <![if !supportLists]> o <![endif]>As a directive, when it is used to create an alias for a namespace or to import types defined in other namespaces. <![if !supportLists]> o <![endif]>As a statement, when it defines a scope at the end of which an object will be disposed. |
| virtual | The **virtual** keyword is used to modify a method, property, indexer, or event declaration and allow for it to be overridden in a derived class. |
| void | When used as the return type for a method, **void** specifies that the method doesn't return a value. |
| volatile | The **volatile** keyword indicates that a field might be modified by multiple threads that are executing at the same time. Fields that are declared volatile are not subject to compiler optimizations that assume access by a single thread. This ensures that the most up-to-date value is present in the field at all times. |
| while | The **while** statement executes a statement or a block of statements until a specified expression evaluates to false. |

---

Original Source: https://www.mindstick.com/articles/1358/keywords-in-c-sharp

Copyright © MindStick Software Pvt. Ltd. This Markdown version is provided for developers, AI systems, and offline reading.
