Difference Between Constant and ReadOnly and Static

Constant and ReadOnly keyword are used to make a field constant which value cannot be modified. Static keyword is used to make members static that can be shared by all the class objects. In this article, I am going to explain the difference among these three.

Constant

Constant fields or local variables must be assigned a value at the time of declaration and after that they cannot be modified. By default constant are static, hence you cannot define a constant type as static.


  1. public const int X = 10;


A const field is a compile-time constant. A constant field or local variable can be initialized with a constant expression which must be fully evaluated at compile time.


  1. void Calculate(int Z)

  2. {

  3. const int X = 10, X1 = 50;

  4. const int Y = X + X1; //no error, since its evaluated a compile time

  5. const int Y1 = X + Z; //gives error, since its evaluated at run time

  6. }


You can apply const keyword to built-in value types (byte, short, int, long, char, float, double, decimal, bool), enum, a string literal, or a reference type which can be assigned with a value null.


  1. const MyClass obj1 = null;//no error, since its evaluated a compile time

  2. const MyClass obj2 = new MyClass();//gives error, since its evaluated at run time


Constants can be marked as public, private, protected, internal, or protected internal access modifiers.
Use the const modifier when you sure that the value a field or local variable would not be changed.

ReadOnly

A readonly field can be initialized either at the time of declaration or with in the constructor of same class. Therefore, readonly fields can be used for run-time constants.


  1. class MyClass

  2. {

  3. readonly int X = 10; // initialized at the time of declaration

  4. readonly int X1;

  5.  

  6. public MyClass(int x1)

  7. {

  8. X1 = x1; // initialized at run time

  9. }

  10. }


Explicitly, you can specify a readonly field as static since, like constant by default it is not static. Readonly keyword can be apply to value type and reference type (which initialized by using the new keyword) both. Also, delegate and event could not be readonly.
Use the readonly modifier when you want to make a field constant at run time.

Static

The static keyword is used to specify a static member, which means static members are common to all the objects and they do not tied to a specific object. This keyword 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.


  1. class MyClass

  2. {

  3. static int X = 10;

  4. int Y = 20;

  5. public static void Show()

  6. {

  7. Console.WriteLine(X);

  8. Console.WriteLine(Y); //error, since you can access only static members

  9. }

  10. }


Key points about Static keyword

  1. If the static keyword is applied to a class, all the members of the class must be static.
  2. Static methods can only access static members of same class. Static properties are used to get or set the value of static fields of a class.
  3. Static constructor can’t be parameterized and public. Static constructor is always a private default constructor which is used to initialize static fields of the class.

Convert Enum to Dictionary C#

While working through ,I have always faced problems where only of i could convert an enum to Dictionary. Here's how you do it.

Code:
/// <summary>
/// Converts Enumeration type into a dictionary of names and values
/// </summary>
/// <param name="t">Enum type</param>
public static IDictionary<string, int> EnumToDictionary(this Type t)
{
    if (t == null) throw new NullReferenceException();
    if (!t.IsEnum) throw new InvalidCastException("object is not an Enumeration");
    string[] names = Enum.GetNames(t);
    Array values = Enum.GetValues(t);
    return (from i in Enumerable.Range(0, names.Length)
            select new { Key = names[i], Value = (int)values.GetValue(i) })
                .ToDictionary(k => k.Key, k => k.Value);
}

Example:
var dictionary = typeof(UriFormat).EnumToDictionary();
/* returns
key => value
SafeUnescaped => 3
Unescaped => 2
UriEscaped => 1
*/

Send Email using SMTP with attachments in ASP.NET

Sample Code

In this article I will explain how to send email with attachment in ASP.Net. The file to be send as attachment along with mail will be uploaded using FileUpload control and will be dynamically added as attachment in the MailMessage class object without saving in any folder on disk.
For this example, for sending emails Gmail SMTP Mail Server will be used. To send email with Gmail SMTP Server, you will need to use an email address and password of a valid Gmail account and along with that you will need the Gmail SMTP Mail Server settings.
HTML Markup
The HTML Markup has a form with some fields such as Recipient Email address, Subject, Body, Attachment, Gmail account email address, Gmail account password and a Button to send the email.
<table border=”0″ cellpadding=”0″ cellspacing=”0″>
    <tr>
        <td style=”width: 80px”>
            To:
        </td>
        <td>
            <asp:TextBox ID=”txtTo” runat=”server”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
            Subject:
        </td>
        <td>
            <asp:TextBox ID=”txtSubject” runat=”server”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td valign = “top”>
            Body:
        </td>
        <td>
            <asp:TextBox ID=”txtBody” runat=”server” TextMode = “MultiLine” Height = “150” Width = “200”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
            File Attachment:
        </td>
        <td>
            <asp:FileUpload ID=”fuAttachment” runat=”server” />
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
            Gmail Email:
        </td>
        <td>
            <asp:TextBox ID=”txtEmail” runat=”server”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
            Gmail Password:
        </td>
        <td>
            <asp:TextBox ID=”txtPassword” runat=”server” TextMode = “Password”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
        </td>
        <td>
            <asp:Button Text=”Send” OnClick=”SendEmail” runat=”server” />
        </td>
    </tr>
</table
MailMessage Class Properties
Following are the required properties of the MailMessage class.
From – Sender’s email address
To – Recipient(s) Email Address
CC – Carbon Copies (if any)
BCC – Blind Carbon Copies (if any)
Subject – Subject of the Email 
Body – Body of the Email
IsBodyHtml – Specify whether body contains text or HTML mark up.
Attachments – Attachments (if any)
ReplyTo – ReplyTo Email address.
SMTP Class Properties
Following are the properties of the SMTP class.
Host – SMTP Server URL (Gmail: smtp.gmail.com)
EnableSsl – Specify whether your host accepts SSL Connections (Gmail: True)
UseDefaultCredentials – Set to True in order to allow authentication based on the Credentials of the Account used to send emails
Credentials – Valid login credentials for the SMTP server (Gmail: email address and password)
Port – Port Number of the SMTP server (Gmail: 587)
Namespaces
You will need to import the following namespaces
C#
using System.IO;
using System.Net;
using System.Net.Mail;
VB.Net
Imports System.IO
Imports System.Net
Imports System.Net.Mail
Sending email with attachment using Gmail SMTP Account
Below is the code to send email using Gmail account and Gmail SMTP server in ASP.Net, the Recipient email address (to), the Sender email address (from), Subject and Body is fetched from their respective fields.
Then all these values are set into an object of the MailMessage class.
For attaching a File as attachment to the email, one has to select the File to be send as attachment using FileUpload control.
If the FileUpload control has attachment then the attachment is added to the Attachments List of the MailMessage Object.
You will notice that the File is directly added as attachment without saving it on disk, this is possible since the file data is extracted from the FileUpload PostedFile InputStream property which belongs to the type System.IO.Stream. The second parameter supplied is the name of the File that has to be send as attachment which is extracted from the FileUpload control PostedFile FileName property.
After that an object of the SmtpClient class is created, where we need to set the settings of the Mail Server here Gmail is the Mail Server so we will set the Mail Settings of the Gmail SMTP Server.
Note: It is necessary to use the sender’s email address credentials while defining the Gmail SMTP Server Credentials as Gmail the sender’s email address must be equal to Gmail Username specified in credentials.

C#
protected void SendEmail(object sender, EventArgs e)
{
    using (MailMessage mm = new MailMessage(txtEmail.Text, txtTo.Text))
    {
        mm.Subject = txtSubject.Text;
        mm.Body = txtBody.Text;
        if (fuAttachment.HasFile)
        {
            string FileName = Path.GetFileName(fuAttachment.PostedFile.FileName);
            mm.Attachments.Add(new Attachment(fuAttachment.PostedFile.InputStream, FileName));
        }
        mm.IsBodyHtml = false;
        SmtpClient smtp = new SmtpClient();
        smtp.Host = “smtp.gmail.com”;
        smtp.EnableSsl = true;
        NetworkCredential NetworkCred = new NetworkCredential(txtEmail.Text, txtPassword.Text);
        smtp.UseDefaultCredentials = true;
        smtp.Credentials = NetworkCred;
        smtp.Port = 587;
        smtp.Send(mm);
        ClientScript.RegisterStartupScript(GetType(), “alert”, “alert(‘Email sent.’);”, true);
    }
}

Send Email using SMTP with attachments in ASP.NET

Sample Code

In this article I will explain how to send email with attachment in ASP.Net. The file to be send as attachment along with mail will be uploaded using FileUpload control and will be dynamically added as attachment in the MailMessage class object without saving in any folder on disk.
For this example, for sending emails Gmail SMTP Mail Server will be used. To send email with Gmail SMTP Server, you will need to use an email address and password of a valid Gmail account and along with that you will need the Gmail SMTP Mail Server settings.
HTML Markup
The HTML Markup has a form with some fields such as Recipient Email address, Subject, Body, Attachment, Gmail account email address, Gmail account password and a Button to send the email.
<table border=”0″ cellpadding=”0″ cellspacing=”0″>
    <tr>
        <td style=”width: 80px”>
            To:
        </td>
        <td>
            <asp:TextBox ID=”txtTo” runat=”server”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
            Subject:
        </td>
        <td>
            <asp:TextBox ID=”txtSubject” runat=”server”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td valign = “top”>
            Body:
        </td>
        <td>
            <asp:TextBox ID=”txtBody” runat=”server” TextMode = “MultiLine” Height = “150” Width = “200”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
            File Attachment:
        </td>
        <td>
            <asp:FileUpload ID=”fuAttachment” runat=”server” />
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
            Gmail Email:
        </td>
        <td>
            <asp:TextBox ID=”txtEmail” runat=”server”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
            Gmail Password:
        </td>
        <td>
            <asp:TextBox ID=”txtPassword” runat=”server” TextMode = “Password”></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
        </td>
        <td>
            <asp:Button Text=”Send” OnClick=”SendEmail” runat=”server” />
        </td>
    </tr>
</table
MailMessage Class Properties
Following are the required properties of the MailMessage class.
From – Sender’s email address
To – Recipient(s) Email Address
CC – Carbon Copies (if any)
BCC – Blind Carbon Copies (if any)
Subject – Subject of the Email 
Body – Body of the Email
IsBodyHtml – Specify whether body contains text or HTML mark up.
Attachments – Attachments (if any)
ReplyTo – ReplyTo Email address.
SMTP Class Properties
Following are the properties of the SMTP class.
Host – SMTP Server URL (Gmail: smtp.gmail.com)
EnableSsl – Specify whether your host accepts SSL Connections (Gmail: True)
UseDefaultCredentials – Set to True in order to allow authentication based on the Credentials of the Account used to send emails
Credentials – Valid login credentials for the SMTP server (Gmail: email address and password)
Port – Port Number of the SMTP server (Gmail: 587)
Namespaces
You will need to import the following namespaces
C#
using System.IO;
using System.Net;
using System.Net.Mail;
VB.Net
Imports System.IO
Imports System.Net
Imports System.Net.Mail
Sending email with attachment using Gmail SMTP Account
Below is the code to send email using Gmail account and Gmail SMTP server in ASP.Net, the Recipient email address (to), the Sender email address (from), Subject and Body is fetched from their respective fields.
Then all these values are set into an object of the MailMessage class.
For attaching a File as attachment to the email, one has to select the File to be send as attachment using FileUpload control.
If the FileUpload control has attachment then the attachment is added to the Attachments List of the MailMessage Object.
You will notice that the File is directly added as attachment without saving it on disk, this is possible since the file data is extracted from the FileUpload PostedFile InputStream property which belongs to the type System.IO.Stream. The second parameter supplied is the name of the File that has to be send as attachment which is extracted from the FileUpload control PostedFile FileName property.
After that an object of the SmtpClient class is created, where we need to set the settings of the Mail Server here Gmail is the Mail Server so we will set the Mail Settings of the Gmail SMTP Server.
Note: It is necessary to use the sender’s email address credentials while defining the Gmail SMTP Server Credentials as Gmail the sender’s email address must be equal to Gmail Username specified in credentials.

C#
protected void SendEmail(object sender, EventArgs e)
{
    using (MailMessage mm = new MailMessage(txtEmail.Text, txtTo.Text))
    {
        mm.Subject = txtSubject.Text;
        mm.Body = txtBody.Text;
        if (fuAttachment.HasFile)
        {
            string FileName = Path.GetFileName(fuAttachment.PostedFile.FileName);
            mm.Attachments.Add(new Attachment(fuAttachment.PostedFile.InputStream, FileName));
        }
        mm.IsBodyHtml = false;
        SmtpClient smtp = new SmtpClient();
        smtp.Host = “smtp.gmail.com”;
        smtp.EnableSsl = true;
        NetworkCredential NetworkCred = new NetworkCredential(txtEmail.Text, txtPassword.Text);
        smtp.UseDefaultCredentials = true;
        smtp.Credentials = NetworkCred;
        smtp.Port = 587;
        smtp.Send(mm);
        ClientScript.RegisterStartupScript(GetType(), “alert”, “alert(‘Email sent.’);”, true);
    }
}

Source:

Top C# ASP.NET Interview Questions

  1. How big is the datatype int in .NET? 32 bits.
  2. How big is the char? 16 bits (Unicode).
  3. How do you initiate a string without escaping each backslash? Put an @ sign in front of the double-quoted string.
  4. What are valid signatures for the Main function?
    • public static void Main()
    • public static int Main()
    • public static void Main( string[] args )
    • public static int Main(string[] args )
  5. Does Main() always have to be public? No.
  6. How do you initialize a two-dimensional array that you don’t know the dimensions of?
    • int [, ] myArray; //declaration
    • myArray= new int [5, 8]; //actual initialization
  7. What’s the access level of the visibility type internal? Current assembly.
  8. What’s the difference between struct and class in C#?
    • Structs cannot be inherited.
    • Structs are passed by value, not by reference.
    • Struct is stored on the stack, not the heap.
  9. Explain encapsulation. The implementation is hidden, the interface is exposed.
  10. What data type should you use if you want an 8-bit value that’s signed? sbyte.
  11. Speaking of Boolean data types, what’s different between C# and C/C++?There’s no conversion between 0 and false, as well as any other number and true, like in C/C++.
  12. Where are the value-type variables allocated in the computer RAM? Stack.
  13. Where do the reference-type variables go in the RAM? The references go on the stack, while the objects themselves go on the heap. However, in reality things are more elaborate.
  14. What is the difference between the value-type variables and reference-type variables in terms of garbage collection? The value-type variables are not garbage-collected, they just fall off the stack when they fall out of scope, the reference-type objects are picked up by GC when their references go null.
  15. How do you convert a string into an integer in .NET? Int32.Parse(string), Convert.ToInt32()
  16. How do you box a primitive data type variable? Initialize an object with its value, pass an object, cast it to an object
  17. Why do you need to box a primitive variable? To pass it by reference or apply a method that an object supports, but primitive doesn’t.
  18. What’s the difference between Java and .NET garbage collectors? Sun left the implementation of a specific garbage collector up to the JRE developer, so their performance varies widely, depending on whose JRE you’re using. Microsoft standardized on their garbage collection.
  19. How do you enforce garbage collection in .NET? System.GC.Collect();
  20. Can you declare a C++ type destructor in C# like ~MyClass()? Yes, but what’s the point, since it will call Finalize(), and Finalize() has no guarantees when the memory will be cleaned up, plus, it introduces additional load on the garbage collector. The only time the finalizer should be implemented, is when you’re dealing with unmanaged code.
  21. What’s different about namespace declaration when comparing that to package declaration in Java? No semicolon. Package declarations also have to be the first thing within the file, can’t be nested, and affect all classes within the file.
  22. What’s the difference between const and readonly? You can initialize readonly variables to some runtime values. Let’s say your program uses current date and time as one of the values that won’t change. This way you declare
    public readonly string DateT = new DateTime().ToString().
  23. Can you create enumerated data types in C#? Yes.
  24. What’s different about switch statements in C# as compared to C++? No fall-throughs allowed.
  25. What happens when you encounter a continue statement inside the for loop?The code for the rest of the loop is ignored, the control is transferred back to the beginning of the loop.
  26. Is goto statement supported in C#? How about Java? Gotos are supported in C#to the fullest. In Java goto is a reserved keyword that provides absolutely no functionality.
  27. Describe the compilation process for .NET code? Source code is compiled and run in the .NET Framework using a two-stage process. First, source code is compiled to Microsoft intermediate language (MSIL) code using a .NET Framework-compatible compiler, such as that for Visual Basic .NET or Visual C#. Second, MSIL code is compiled to native code.
  28. Name any 2 of the 4 .NET authentification methods. ASP.NET, in conjunction with Microsoft Internet Information Services (IIS), can authenticate user credentials such as names and passwords using any of the following authentication methods:
    • Windows: Basic, digest, or Integrated Windows Authentication (NTLM or Kerberos).
    • Microsoft Passport authentication
    • Forms authentication
    • Client Certificate authentication
  29. How do you turn off SessionState in the web.config file? In the system.web section of web.config, you should locate the httpmodule tag and you simply disable session by doing a remove tag with attribute name set to session.
    <httpModules>
    <remove name=”Session” />
    </httpModules>
  30. What is main difference between Global.asax and Web.Config? ASP.NET uses the global.asax to establish any global objects that your Web application uses. The .asax extension denotes an application file rather than .aspx for a page file. Each ASP.NET application can contain at most one global.asax file. The file is compiled on the first page hit to your Web application. ASP.NET is also configured so that any attempts to browse to the global.asax page directly are rejected. However, you can specify application-wide settings in the web.config file. The web.config is an XML-formatted text file that resides in the Web site’s root directory. Through Web.config you can specify settings like custom 404 error pages, authentication and authorization settings for the Web site, compilation options for the ASP.NET Web pages, if tracing should be enabled, etc.

Some More C# Interview Questions

What is static constructor?

Static constructor is used to initialize static data members as soon as the class is referenced first time, whereas an instance constructor is used to create an instance of that class with keyword. A static constructor does not take access modifiers or have parameters and can’t access any non-static data member of a class.

What is the use of Monitor in C#?

It provides a mechanism that synchronizes access to objects. 

The Monitor class controls access to objects by granting a lock for an object to a single thread. Object locks provide the ability to restrict access to a block of code, commonly called a critical section. While a thread owns the lock for an object, no other thread can acquire that lock. You can also use Monitor to ensure that no other thread is allowed to access a section of application code being executed by the lock owner, unless the other thread is executing the code using a different locked object. 


What is lock statement in C#?

Lock ensures that one thread does not enter a critical section of code while another thread is in the critical section. If another thread attempts to enter a locked code, it will wait, block, until the object is released.


How to loop through all rows of the DataTable?

You can do this in more than one way but ForEach loop is much better than any other way in terms of cleanliness of the code or performance. 

ForEach loop 
foreach (DataRow row in dTable.Rows)

{

     yourvariable = row[“ColumnName”].ToString();

}


For loop

for (int j = 0; j< dTable.Rows.Count; j++)

{

    yourvariable = dTable.Rows[j][“ColumnName”].ToString()l

}


What is an Array?

An array is a collection of related instance either value or reference types. Array posses an immutable structure in which the number of dimensions and size of the array are fixed at instantiation. 

C# Supports Single, Multi dimensional and Jagged Array

Single Dimensional Array: it is sometimes called vector array consists of single row. 

Multi-Dimensional Array: are rectangular & consists of rows and columns. 

Jagged Array: also consists of rows & columns but in irregular shaped (like row 1 has 3 column and row 2 has 5 column)

What is an ArrayList?

ArrayList is a dynamic array. Elements can be added & removed from an arraylist at the runtime. In this elements are not automatically sorted.

What is BitArray?

The BitArray collection is a composite of bit values. It stores 1 or 0 where 1 is true and 0 is false. This collection provides an efficient means of storing and retrieving bit values.

What is HashTable?

A Hashtable is a collection of key-value pairs. Entries in this are instance of DictionaryEntry type. It implements IDictionary, ISerilizable, IDeserializable collback interface.


 
What is Queue?

This is a collection that abstracts FIFO (First In First Out) data structure. The initial capacity is 32 elements. It is ideal for messaging components.

What is Stack?

This is a collection that abstracts LIFO (Last In First Out) data structure in which initial capacity is 32.

What is SortedList?

This is a collection and it is a combination of key/value entries and an ArrayList collection. Where the collection is sorted by key.

What is Delegates?

A delegate in C# allows you to pass method of one class to objects of other class that can call these methods. 

OR 

A delegate is an object that holds the reference to a method. 

In C++ it is called function pointer.

What is a collection?

A collection serves as a container for instances of other classes. All classes implement ICollection interface which intern implement IEnumerable interface.

What is reflection?

Reflection is the ability to find the information about types contained in an assembly at runtime. 

OR 

Reflection is the ability to find out information about objects, the application details (assemblies), its metadata at run-time. 

How is the DLL Hell problem solved in .NET?

Assembly versioning allows the application to specify not only the library it needs to run (which was available under Win32), but also the version of the assembly.

Are private class-level variables inherited?

Yes, but they are not accessible. Although they are not visible or accessible via the class interface, they are inherited.

What’s the difference between the System.Array.CopyTo() and System.Array.Clone()?

The Clone() method returns a new array (a shallow copy) object containing all the elements in the original array. The CopyTo() method copies the elements into another existing array. Both perform a shallow copy. A shallow copy means the contents (each array element) contains references to the same object as the elements in the original array. A deep copy (which neither of these methods performs) would create a new instance of each element’s object, resulting in a different, yet identacle object.

How can you sort the elements of the array in descending order?

By calling Array.Sort() and then Array.Reverse() methods.

What class is underneath the SortedList class?

A sorted HashTable.

Top c# Interview Questions

Basic 

  • 1. What is C#?
    C# is an object oriented, type safe and managed language that is compiled by .Net framework to generate Microsoft Intermediate Language.
    2.       What are the types of comment in C# with examples?
    Single line
    Eg:
    [csharp]   //This is a Single line comment[/csharp]
    ii. Multiple line (/* */)
    Eg:
    [csharp] /*This is a multiple line comment
    We are in line 2
    Last line of comment*/[/csharp]
    iii. XML Comments (///).
    Eg:
    [csharp]/// summary;
    ///  Set error message for multilingual language.
    /// summary[/csharp]
    3.       Can multiple catch blocks be executed?
    No, Multiple catch blocks can’t be executed. Once the proper catch code executed, the control is transferred to the finally block and then the code that follows the finally block gets executed.
    4.       What is the difference between public, static and void?
    All these are access modifiers in C#. Public declared variables or methods are accessible anywhere in the application. Static declared variables or methods are globally accessible without creating an instance of the class. The compiler stores the address of the method as the entry point and uses this information to begin execution before any objects are created. And Void is a type modifier that states that the method or variable does not return any value.
    5.       What is an object?  
    An object is an instance of a class through which we access the methods of that class. “New” keyword is used to create an object. A class that creates an object in memory will contain the information about the methods, variables and behavior of that class.
    6.       Define Constructors?  
    A constructor is a member function in a class that has the same name as its class. The constructor is automatically invoked whenever an object class is created. It constructs the values of data members while initializing the class.
    7.       What is Jagged Arrays?
    The array which has elements of type array is called jagged array. The elements can be of different dimensions and sizes. We can also call jagged array as Array of arrays.
    8.       What is the difference between ref & out parameters?
    An argument passed as ref must be initialized before passing to the method whereas out parameter needs not to be initialized before passing to a method.
    9.       What is the use of using statement in C#?  
    The using block is used to obtain a resource and use it and then automatically dispose of when the execution of block completed.
    10.   What is serialization?  
    When we want to transport an object through network then we have to convert the object into a stream of bytes. The process of converting an object into a stream of bytes is called Serialization. For an object to be serializable, it should inherit ISerialize Interface.
    De-serialization is the reverse process of creating an object from a stream of bytes.
    11.   Can “this” be used within a static method?  
    We can’t use ‘This’ in a static method because we can only use static variables/methods in a static method.
    12.   What is difference between constants and read-only?  
    Constant variables are declared and initialized at compile time. The value can’t be changed after wards. Read-only variables will be initialized only from the Static constructor of the class. Read only is used only when we want to assign the value at run time.
    13.   What is an interface class?  
    Interface is an abstract class which has only public abstract methods and the methods only have the declaration and not the definition. These abstract methods must be implemented in the inherited classes.
    14.   What are value types and reference types?  
    Value types are stored in the Stack whereas reference types stored on heap.
    Value types:
    [csharp] int, enum , byte, decimal, double, float, long[/csharp]
    Reference Types:
    [csharp] string , class, interface, object.[/csharp]
    15.   What are Custom Control and User Control?  
    Custom Controls are controls generated as compiled code (Dlls), those are easier to use and can be added to toolbox. Developers can drag and drop controls to their web forms. Attributes can be set at design time. We can easily add custom controls to Multiple Applications (If Shared Dlls), If they are private then we can copy to dll to bin directory of web application and then add reference and can use them.
    User Controls are very much similar to ASP include files, and are easy to create. User controls can’t be placed in the toolbox and dragged – dropped from it. They have their design and code behind. The file extension for user controls is ascx.
    16.   What are sealed classes in C#?  
    We create sealed classes when we want to restrict the class to be inherited. Sealed modifier used to prevent derivation from a class. If we forcefully specify a sealed class as base class then a compile-time error occurs.
    17.   What is method overloading?  
    Method overloading is creating multiple methods with the same name with unique signatures in the same class. When we compile, the compiler uses overload resolution to determine the specific method to be invoke.
    18.   What is the difference between Array and Arraylist?  
    In an array, we can have items of the same type only. The size of the array is fixed. An arraylist is similar to an array but it doesn’t have a fixed size.
    19.   Can a private virtual method be overridden?  
    No, because they are not accessible outside the class.
    20. Describe the accessibility modifier “protected internal”.
    Protected Internal variables/methods are accessible within the same assembly and also from the classes that are derived from this parent class.
    21. What are the differences between System.String and System.Text.StringBuilder classes?
    System.String is immutable. When we modify the value of a string variable then a new memory is allocated to the new value and the previous memory allocation released. System.StringBuilder was designed to have concept of a mutable string where a variety of operations can be performed without allocation separate memory location for the modified string.
    22. What’s the difference between the System.Array.CopyTo() and System.Array.Clone() ?
    Using Clone() method, we creates a new array object containing all the elements in the original array and using CopyTo() method, all the elements of existing array copies into another existing array. Both the methods perform a shallow copy.
    23. How can we sort the elements of the array in descending order?
    Using Sort() methods followed by Reverse() method.
    24. Write down the C# syntax to catch exception?
    To catch an exception, we use try catch blocks. Catch block can have parameter of system.Exception type.
    Eg:
    [csharp]try
    {
    GetAllData();
    }
    catch(Exception ex)
    {
    }[/csharp]
    In the above example, we can omit the parameter from catch statement.
    25.   What’s the difference between an interface and abstract class?
    Interfaces have all the methods having only declaration but no definition. In an abstract class, we can have some concrete methods. In an interface class, all the methods are public. An abstract class may have private methods.
     26.   What is the difference between Finalize() and Dispose() methods?
    Dispose() is called when we want for an object to release any unmanaged resources with them. On the other hand Finalize() is used for the same purpose but it doesn’t assure the garbage collection of an object.
    27.   What are circular references?
    Circular reference is situation in which two or more resources are interdependent on each other causes the lock condition and make the resources unusable.
    28.   What are generics in C#.NET?
    Generics are used to make reusable code classes to decrease the code redundancy, increase type safety and performance. Using generics, we can create collection classes. To create generic collection, System.Collections.Generic namespace should be used instead of classes such as ArrayList in the System.Collections namespace. Generics promotes the usage of parameterized types.
    29.   What is an object pool in .NET?
    An object pool is a container having objects ready to be used. It tracks the object that is currently in use, total number of objects in the pool. This reduces the overhead of creating and re-creating objects.
    30.   List down the commonly used types of exceptions in .Net?
    ArgumentException, ArgumentNullException , ArgumentOutOfRangeException, ArithmeticException, DivideByZeroException ,OverflowException , IndexOutOfRangeException ,InvalidCastException ,InvalidOperationException , IOEndOfStreamException , NullReferenceException , OutOfMemoryException , StackOverflowException etc.
    31.   What are Custom Exceptions?
    Sometimes there are some errors that need to be handeled as per user requirements. Custom exceptions are used for them and are used defined exceptions.
    32.   What are delegates?
    Delegates are same are function pointers in C++ but the only difference is that they are type safe unlike function pointers. Delegates are required because they can be used to write much more generic type safe functions.
    33.   How do you inherit a class into other class in C#?
    Colon is used as inheritance operator in C#. Just place a colon and then the class name.
    [csharp] public class DerivedClass : BaseClass[/csharp]

    34.   What is the base class in .net from which all the classes are derived from?
    [csharp]System.Object[/csharp]
    35.   What is the difference between method overriding and method overloading?
    In method overriding, we change the method definition in the derived class that changes the method behavior. Method overloading is creating a method with the same name within the same class having different signatures.
    36. What are the different ways a method can be overloaded?
    Methods can be overloaded using different data types for parameter, different order of parameters, and different number of parameters.
    37. Why can’t you specify the accessibility modifier for methods inside the interface?
    In an interface, we have virtual methods that do not have method definition. All the methods are there to be overridden in the derived class. That’s why they all are public.
    38.   How can we set class to be inherited, but prevent the method from being over-ridden?
    Declare the class as public and make the method sealed to prevent it from being overridden.
    39. What happens if the inherited interfaces have conflicting method names?
    Implement is up to you as the method is inside your own class. There might be problem when the methods from different interfaces expect different data, but as far as compiler cares you’re okay.
    40. What is the difference between a Struct and a Class?
    Structs are value-type variables and classes are reference types. Structs stored on the stack, causes additional overhead but faster retrieval. Structs cannot be inherited.
    41.   How to use nullable types in .Net?
    Value types can take either their normal values or a null value. Such types are called nullable types.
    [csharp]Int? someID = null;
    If(someID.HasVAlue)
    {
    }
    [/csharp]
    42.   How we can create an array with non-default values?
    We can create an array with non-default values using Enumerable.Repeat.
    43.   What is difference between is and as operators in c#?
    “is” operator is used to check the compatibility of an object with a given type and it returns the result as Boolean.
    “as” operator is used for casting of object to a type or a class.
    44.   What’s a multicast delegate?
    A delegate having multiple handlers assigned to it is called multicast delegate. Each handler is assigned to a method.
     45.   What are indexers in C# .NET?
    Indexers are known as smart arrays in C#. It allows the instances of a class to be indexed in the same way as array.
    Eg:
    [csharp]public int this[int index]    // Indexer declaration[/csharp]
    46.   What is difference between the “throw” and “throw ex” in .NET?
    “Throw” statement preserves original error stack whereas “throw ex” have the stack trace from their throw point. It is always advised to use “throw” because it provides more accurate error information.
    47.   What are C# attributes and its significance?
    C# provides developers a way to define declarative tags on certain entities eg. Class, method etc. are called attributes. The attribute’s information can be retrieved at runtime using Reflection.
    48.   How to implement singleton design pattern in C#?
    In singleton pattern, a class can only have one instance and provides access point to it globally.
    Eg:
    [csharp]
    Public sealed class Singleton
    {
    Private static readonly Singleton _instance = new Singleton();
    }
    [/csharp]
    49.   What is the difference between directcast and ctype?
    DirectCast is used to convert the type of an object that requires the run-time type to be the same as the specified type in DirectCast.
    Ctype is used for conversion where the conversion is defined between the expression and the type.
    50.   Is C# code is managed or unmanaged code?
    C# is managed code because Common language runtime can compile C# code to Intermediate language.

    51. What are the advantages of C# over C, C++ or Java?

    Like C++ and Java, C# is a high-level object-oriented programming language. It is generally more efficient than Java and has useful features such as operator overloading. C# is based on C++ but has several advantages over this older language: it is type-safe, more comprehensively object-oriented, and the syntax has been simplified in several important ways. Most importantly, C# interoperates exceptionally well with other languages on the .NET platform. For this reason, C# is a better choice for building applications for .NET.

    52. How are namespaces used in C#?

    Classes in the .NET framework can be organized using namespaces. The scope of a class is declared using the namespace keyword. You can then include methods from the namespace in your code by including the line “using [namespace];” at the start of your program.

    53. What is a constructor?

    A constructor is the method of a class that is called when an object of that class is created. The constructor initializes class parameters and has the same name as the class.

    54. What is a destructor?

    A destructor deletes an object of the class from memory. It is called when the object is explicitly deleted by the code you write, or when the object passes out of scope, which can happen when the program exits a function. The destructor has the same name as the class, but with a tilde prefix.

    55. How are methods overloaded in C#?

    You can overload methods in C# by specifying different numbers or types of parameters in the method definition. Overloading can help to give your program the flexibility it needs to operate with different types of data input.

    56. Why use encapsulation?

    Encapsulation – combining function definitions and data together into a class – is used to separate parts of the code from the rest of the program. This allows the private data of an object to be hidden from the rest of the program, keep code clean and easy to understand, and allows classes to be reused in other programs.

    57. What is the difference between a class and a struct?

    Whereas classes are passed by reference, structs are passed by value. Classes can be inherited, but structs cannot. Structs generally give better performance as they are stored on the stack rather than the heap.

    58. What is the GAC?

    The acronym GAC stands for Global Assembly Cache. The GAC is where assemblies are stored so that many different applications can share these assemblies. Multiple versions of assemblies can be stored in the GAC, with applications specifying which version to use in the config file.

    59. How does .NET help to manage DLLs on a system?

    When you have multiple DLLs on a system, you are in what is known as “DLL Hell”. Managing the DLLs can be particularly difficult if there are multiple versions of the various DLLs. In the .NET framework, assemblies are managed using the information stored in their metadata, and you can store multiple versions of each in the GAC.

    60. What types of error can occur in a C# program?

    The three possible types of C# error are as follows:
    • Syntax error. This type of error, which is identified during compilation, occurs because the programmer has used syntax incorrectly or included a typo in the code.
    • Logic error. This type of error causes the program to do something other than what the programmer intended. The program will output an unexpected result in response to tests.
    • Runtime error. This type of error causes the program to crash or terminate incorrectly.

Remove All Namespace from XML string

//Implemented based on interface, not part of algorithm
        public static string RemoveAllNamespaces(string xmlDocument)
        {
            XElement xmlDocumentWithoutNs = RemoveAllNamespaces(XElement.Parse(xmlDocument));

            return xmlDocumentWithoutNs.ToString();
        }

        //Implemented based on interface, not part of algorithm
        public static string RemoveAllNamespaces(string xmlDocument, XNamespace nameException)
        {
            XElement xmlDocumentWithoutNs = RemoveAllNamespaces(XElement.Parse(xmlDocument));

            return xmlDocumentWithoutNs.ToString();
        }

        //Core recursion function
        private static XElement RemoveAllNamespaces(XElement xmlDocument)
        {
            if (!xmlDocument.HasElements)
            {
                XElement xElement = new XElement(xmlDocument.Name.LocalName);
                xElement.Value = xmlDocument.Value;

                foreach (XAttribute attribute in xmlDocument.Attributes())
                    xElement.Add(attribute);

                return xElement;
            }
            return new XElement(xmlDocument.Name.LocalName, xmlDocument.Elements().Select(el => RemoveAllNamespaces(el)));
        }

Random String Generator C#

using System;
    using System.Security.Cryptography;

    /// <summary>
    /// TODO: Update summary.
    /// </summary>
    public class RandomStringGenerator
    {
        public bool UseSpecialCharacters { get; set; }

        public RandomStringGenerator()
        {
            UseSpecialCharacters = true;
        }

        private static int DEFAULT_MIN_PASSWORD_LENGTH = 8;
        private static int DEFAULT_MAX_PASSWORD_LENGTH = 10;

        // Define supported password characters divided into groups.
        // You can add (or remove) characters to (from) these groups.
        private const string PASSWORD_CHARS_LCASE = “abcdefgijkmnopqrstwxyz”;

        private const string PASSWORD_CHARS_UCASE = “ABCDEFGHJKLMNPQRSTWXYZ”;
        private const string PASSWORD_CHARS_NUMERIC = “23456789”;
        private const string PASSWORD_CHARS_SPECIAL = “*$-+?_&=!%{}/”;

        /// <summary>
        /// Generates a random password.
        /// </summary>
        /// <returns>
        /// Randomly generated password.
        /// </returns>
        /// <remarks>
        /// The length of the generated password will be determined at
        /// random. It will be no shorter than the minimum default and
        /// no longer than maximum default.
        /// </remarks>
        public string Generate()
        {
            return Generate(DEFAULT_MIN_PASSWORD_LENGTH,
                            DEFAULT_MAX_PASSWORD_LENGTH);
        }

        /// <summary>
        /// Generates a random password of the exact length.
        /// </summary>
        /// <param name=”length”>
        /// Exact password length.
        /// </param>
        /// <returns>
        /// Randomly generated password.
        /// </returns>
        public string Generate(int length)
        {
            length = 8;
            return Generate(length, length);
        }

        /// <summary>
        /// Generates a random password.
        /// </summary>
        /// <param name=”minLength”>
        /// Minimum password length.
        /// </param>
        /// <param name=”maxLength”>
        /// Maximum password length.
        /// </param>
        /// <returns>
        /// Randomly generated password.
        /// </returns>
        /// <remarks>
        /// The length of the generated password will be determined at
        /// random and it will fall with the range determined by the
        /// function parameters.
        /// </remarks>
        public string Generate(int minLength,
                                      int maxLength)
        {
            // Make sure that input parameters are valid.
            if (minLength <= 0 || maxLength <= 0 || minLength > maxLength)
                return null;

            // Create a local array containing supported password characters
            // grouped by types. You can remove character groups from this
            // array, but doing so will weaken the password strength.

            char[][] charGroups = new char[][]
            {
                PASSWORD_CHARS_LCASE.ToCharArray(),
                PASSWORD_CHARS_UCASE.ToCharArray(),
                PASSWORD_CHARS_NUMERIC.ToCharArray(),
            };
            if (UseSpecialCharacters)
            {
                charGroups.Append(PASSWORD_CHARS_SPECIAL.ToCharArray());
            }

            // Use this array to track the number of unused characters in each
            // character group.
            int[] charsLeftInGroup = new int[charGroups.Length];

            // Initially, all characters in each group are not used.
            for (int i = 0; i < charsLeftInGroup.Length; i++)

                charsLeftInGroup[i] = charGroups[i].Length;

            // Use this array to track (iterate through) unused character groups.
            int[] leftGroupsOrder = new int[charGroups.Length];

            // Initially, all character groups are not used.
            for (int i = 0; i < leftGroupsOrder.Length; i++)

                leftGroupsOrder[i] = i;

            // Because we cannot use the default randomizer, which is based on the
            // current time (it will produce the same “random” number within a
            // second), we will use a random number generator to seed the
            // randomizer.

            // Use a 4-byte array to fill it with random bytes and convert it then
            // to an integer value.
            byte[] randomBytes = new byte[4];

            // Generate 4 random bytes.
            var rng = new RNGCryptoServiceProvider();

            rng.GetBytes(randomBytes);

            // Convert 4 bytes into a 32-bit integer value.
            int seed = (randomBytes[0] & 0x7f) << 24 |

                       randomBytes[1] << 16 |

                       randomBytes[2] << 8 |

                       randomBytes[3];

            // Now, this is real randomization.
            Random random = new Random(seed);

            // This array will hold password characters.
            char[] password = null;

            // Allocate appropriate memory for the password.
            if (minLength < maxLength)

                password = new char[random.Next(minLength, maxLength + 1)];

            else

                password = new char[minLength];

            // Index of the next character to be added to password.
            int nextCharIdx;

            // Index of the next character group to be processed.
            int nextGroupIdx;

            // Index which will be used to track not processed character groups.
            int nextLeftGroupsOrderIdx;

            // Index of the last non-processed character in a group.
            int lastCharIdx;

            // Index of the last non-processed group.
            int lastLeftGroupsOrderIdx = leftGroupsOrder.Length – 1;

            // Generate password characters one at a time.
            for (int i = 0; i < password.Length; i++)
            {
                // If only one character group remained unprocessed, process it;
                // otherwise, pick a random character group from the unprocessed
                // group list. To allow a special character to appear in the
                // first position, increment the second parameter of the Next
                // function call by one, i.e. lastLeftGroupsOrderIdx + 1.
                if (lastLeftGroupsOrderIdx == 0)
                    nextLeftGroupsOrderIdx = 0;
                else
                    nextLeftGroupsOrderIdx = random.Next(0,
                                                         lastLeftGroupsOrderIdx);

                // Get the actual index of the character group, from which we will
                // pick the next character.
                nextGroupIdx = leftGroupsOrder[nextLeftGroupsOrderIdx];

                // Get the index of the last unprocessed characters in this group.
                lastCharIdx = charsLeftInGroup[nextGroupIdx] – 1;

                // If only one unprocessed character is left, pick it; otherwise,
                // get a random character from the unused character list.
                if (lastCharIdx == 0)
                    nextCharIdx = 0;
                else
                    nextCharIdx = random.Next(0, lastCharIdx + 1);

                // Add this character to the password.
                password[i] = charGroups[nextGroupIdx][nextCharIdx];

                // If we processed the last character in this group, start over.
                if (lastCharIdx == 0)

                    charsLeftInGroup[nextGroupIdx] =

                                              charGroups[nextGroupIdx].Length;

                // There are more unprocessed characters left.
                else
                {
                    // Swap processed character with the last unprocessed character
                    // so that we don’t pick it until we process all characters in
                    // this group.
                    if (lastCharIdx != nextCharIdx)
                    {
                        char temp = charGroups[nextGroupIdx][lastCharIdx];

                        charGroups[nextGroupIdx][lastCharIdx] =

                                    charGroups[nextGroupIdx][nextCharIdx];

                        charGroups[nextGroupIdx][nextCharIdx] = temp;
                    }

                    // Decrement the number of unprocessed characters in
                    // this group.
                    charsLeftInGroup[nextGroupIdx]–;
                }

                // If we processed the last group, start all over.
                if (lastLeftGroupsOrderIdx == 0)
                    lastLeftGroupsOrderIdx = leftGroupsOrder.Length – 1;
                // There are more unprocessed groups left.
                else
                {
                    // Swap processed group with the last unprocessed group
                    // so that we don’t pick it until we process all groups.
                    if (lastLeftGroupsOrderIdx != nextLeftGroupsOrderIdx)
                    {
                        int temp = leftGroupsOrder[lastLeftGroupsOrderIdx];

                        leftGroupsOrder[lastLeftGroupsOrderIdx] =

                                    leftGroupsOrder[nextLeftGroupsOrderIdx];

                        leftGroupsOrder[nextLeftGroupsOrderIdx] = temp;
                    }
                    // Decrement the number of unprocessed groups.
                    lastLeftGroupsOrderIdx–;
                }
            }

            // Convert password characters into a string and return the result.
            return new string(password);
        }
    }

    /// <summary>
    /// Illustrates the use of the RandomPassword class.
    /// </summary>
    ////////public class RandomPasswordTest
    ////////{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    ////////[STAThread]
    ////////private static void Main(string[] args)
    ////////{
    ////////    // Print 100 randomly generated passwords (8-to-10 char long).
    ////////    for (int i = 0; i < 100; i++)
    ////////        Console.WriteLine(RandomPassword.Generate(8, 10));
    ////////}
    ////////}

Read to End Stream, (With Error Handling)

/// <summary>
    /// TODO: Update summary.
    /// </summary>
    public class StreamHelper
    {
        public static byte[] ReadToEnd(Stream stream)
        {
            long originalPosition = 0;

            if (stream.CanSeek)
            {
                originalPosition = stream.Position;
                stream.Position = 0;
            }

            try
            {
                byte[] readBuffer = new byte[4096];

                int totalBytesRead = 0;
                int bytesRead;

                while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length – totalBytesRead)) > 0)
                {
                    totalBytesRead += bytesRead;

                    if (totalBytesRead == readBuffer.Length)
                    {
                        int nextByte = stream.ReadByte();
                        if (nextByte != -1)
                        {
                            byte[] temp = new byte[readBuffer.Length * 2];
                            Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);
                            Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);
                            readBuffer = temp;
                            totalBytesRead++;
                        }
                    }
                }

                byte[] buffer = readBuffer;
                if (readBuffer.Length != totalBytesRead)
                {
                    buffer = new byte[totalBytesRead];
                    Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead);
                }
                return buffer;
            }
            finally
            {
                if (stream.CanSeek)
                {
                    stream.Position = originalPosition;
                }
            }
        }
    }