Pages

Thursday 28 November 2013

Understanding virtual, override and new keyword

As you know Polymorphism is the concepts of OOPS which includes method overriding and method overloading. Virtual and Override keyword are used for method overriding and new keyword is used for method hiding. Let's have look on these keywords in C# and try to understand each importance.

Simple Class Inheritance

Consider the below class hierarchy with classes A, B and C. A is the super/base class, B is derived from class A and C is derived from class B.
If a method Test() is declared in the base class A and classes B or C has no methods as shown below.
  1. using System;
  2. namespace Polymorphism
  3. {
  4. class A
  5. {
  6. public void Test() { Console.WriteLine("A::Test()"); }
  7. }
  8.  
  9. class B : A { }
  10.  
  11. class C : B { }
  12.  
  13. class Program
  14. {
  15. static void Main(string[] args)
  16. {
  17. A a = new A();
  18. a.Test(); // output --> "A::Test()"
  19.  
  20. B b = new B();
  21. b.Test(); // output --> "A::Test()"
  22.  
  23. C c = new C();
  24. c.Test(); // output --> "A::Test()"
  25.  
  26. Console.ReadKey();
  27.  
  28. }
  29. }
  30. }
Suppose you have Test() method in all the classes A, B, C as shown below:
  1. using System;
  2. namespace Polymorphism
  3. {
  4. class A
  5. {
  6. public void Test() { Console.WriteLine("A::Test()"); }
  7. }
  8.  
  9. class B : A
  10. {
  11. public void Test() { Console.WriteLine("B::Test()"); }
  12. }
  13.  
  14. class C : B
  15. {
  16. public void Test() { Console.WriteLine("C::Test()"); }
  17. }
  18.  
  19. class Program
  20. {
  21. static void Main(string[] args)
  22. {
  23. A a = new A();
  24. B b = new B();
  25. C c = new C();
  26.  
  27. a.Test(); // output --> "A::Test()"
  28. b.Test(); // output --> "B::Test()"
  29. c.Test(); // output --> "C::Test()"
  30.  
  31. a = new B();
  32. a.Test(); // output --> "A::Test()"
  33.  
  34. b = new C();
  35. b.Test(); // output --> "B::Test()"
  36.  
  37. Console.ReadKey();
  38. }
  39. }
  40. }
When you will run the above program, it will run successfully and gives the O/P. But this program will show the two warnings as shown below:
  1. 'Polymorphism.B.Test()' hides inherited member 'Polymorphism.A.Test()'. Use the new keyword if hiding was intended.
  2. 'Polymorphism.C.Test()' hides inherited member 'Polymorphism.B.Test()'. Use the new keyword if hiding was intended.

Method Hiding (new keyword)

As you have seen in the above example the compiler generate the warnings since C# also supports method hiding. For hiding the base class method from derived class simply declare the derived class method with new keyword. Hence above code can be re-written as :
  1. using System;
  2. namespace Polymorphism
  3. {
  4. class A
  5. {
  6. public void Test() { Console.WriteLine("A::Test()"); }
  7. }
  8.  
  9. class B : A
  10. {
  11. public new void Test() { Console.WriteLine("B::Test()"); }
  12. }
  13.  
  14. class C : B
  15. {
  16. public new void Test() { Console.WriteLine("C::Test()"); }
  17. }
  18.  
  19. class Program
  20. {
  21. static void Main(string[] args)
  22. {
  23. A a = new A();
  24. B b = new B();
  25. C c = new C();
  26.  
  27. a.Test(); // output --> "A::Test()"
  28. b.Test(); // output --> "B::Test()"
  29. c.Test(); // output --> "C::Test()"
  30.  
  31. a = new B();
  32. a.Test(); // output --> "A::Test()"
  33.  
  34. b = new C();
  35. b.Test(); // output --> "B::Test()"
  36.  
  37. Console.ReadKey();
  38. }
  39. }
  40. }
Moreover, if you are expecting the fourth and fifth output should be "B::Foo()" and "C::Foo()" since the objects a and b are referenced by the object of B and C respectively then you have to re-write the above code for Method Overriding.

Method Overriding (virtual and override keyword)

In C#, for overriding the base class method in derived class, you have to declare base class method as virtual and derived class method as override as shown below:
  1. using System;
  2. namespace Polymorphism
  3. {
  4. class A
  5. {
  6. public virtual void Test() { Console.WriteLine("A::Test()"); }
  7. }
  8.  
  9. class B : A
  10. {
  11. public override void Test() { Console.WriteLine("B::Test()"); }
  12. }
  13. class C : B
  14. {
  15. public override void Test() { Console.WriteLine("C::Test()"); }
  16. }
  17. class Program
  18. {
  19. static void Main(string[] args)
  20. {
  21. A a = new A();
  22. B b = new B();
  23. C c = new C();
  24. a.Test(); // output --> "A::Test()"
  25. b.Test(); // output --> "B::Test()"
  26. c.Test(); // output --> "C::Test()"
  27. a = new B();
  28. a.Test(); // output --> "B::Test()"
  29. b = new C();
  30. b.Test(); // output --> "C::Test()"
  31.  
  32. Console.ReadKey();
  33. }
  34. }
  35. }

Mixing Method Overriding and Method Hiding

You can also mix the method hiding and method overriding by using virtual and new keyword since the method of a derived class can be virtual and new at the same time. This is required when you want to further override the derived class method into next level as I am overriding Class B, Test() method in Class C as shown below:
  1. using System;
  2. namespace Polymorphism
  3. {
  4. class A
  5. {
  6. public void Test() { Console.WriteLine("A::Test()"); }
  7. }
  8.  
  9. class B : A
  10. {
  11. public new virtual void Test() { Console.WriteLine("B::Test()"); }
  12. }
  13.  
  14. class C : B
  15. {
  16. public override void Test() { Console.WriteLine("C::Test()"); }
  17. }
  18.  
  19. class Program
  20. {
  21. static void Main(string[] args)
  22. {
  23.  
  24. A a = new A();
  25. B b = new B();
  26. C c = new C();
  27.  
  28. a.Test(); // output --> "A::Test()"
  29. b.Test(); // output --> "B::Test()"
  30. c.Test(); // output --> "C::Test()"
  31.  
  32. a = new B();
  33. a.Test(); // output --> "A::Test()"
  34.  
  35. b = new C();
  36. b.Test(); // output --> "C::Test()"
  37.  
  38. Console.ReadKey();
  39. }
  40. }
  41. }

Note

  1. The virtual keyword is used to modify a method, property, indexer, or event declared in the base class and allow it to be overridden in the derived class.
  2. The override keyword is used to extend or modify a virtual/abstract method, property, indexer, or event of base class into derived class.
  3. The new keyword is used to hide a method, property, indexer, or event of base class into derived class.

Understanding Model View Controller in Asp.Net MVC

The Model-View-Controller (MVC) pattern was introduced in 1970s. It is a software design pattern that splits an application into three main aspects : Model, View and Controller. Moreover, MVC pattern forces a separation of concerns within an application for example, separating data access logic and business logic from the UI.

Model - The "M" in "MVC"

The Model represents a set of classes that describes the business logic and data. It also defines business rules for how the data can be changed and manipulated.
Moreover, models in Asp.Net MVC, handles the Data Access Layer by using ORM tools like Entity Framework or NHibernate etc. By default, models are stored in the Models folder of the project.

The Model can be broken down into several different layers as given below:

  1. Objects or ViewModel Layer

    This layer contains simple objects or complex objects which are used to specify strongly-typed view. These objects are used to pass data from controller to strongly-typed view and vice versa. The classes for these objects can have specific validation rules which are defined by using data annotations. Typically, these classes have those properties which you want to display on corresponding view/page.
  2. Data Access Layer

    This layer provides objects to access and manipulate the database of your application. Typically, this layer is made by using ORM tools like Entity Framework or NHibernate etc.
  3. Business Layer

    This layer helps you to implement your business logic and validations for your application. This layer make use of Data Access Layer for persisting data into database. Also, this layer is directly invoked by the Controller to do processing on input data and sent back to view.

View - The "V" in "MVC"

The View is responsible for transforming a model or models into UI. The Model is responsible for providing all the required business logic and validation to the view. The view is only responsible for displaying the data, that is received from the controller as the result.
Moreover, views in Asp.Net MVC, handles the UI presentation of data as the result of a request received by a controller. By default, views are stored in the Views folder of the project.

Controller - The "C" in "MVC"

The Controller is responsible for controlling the application logic and acts as the coordinator between the View and the Model. The Controller receive input from users via the View, then process the user's data with the help of Model and passing the results back to the View.
Moreover, controllers in Asp.Net MVC, respond to HTTP requests and determine the action to take based upon the content of the incoming request. By default, controllers are stored in the Controllers folder of the project.

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.

Understanding Type Casting or Type Conversion in C#

Different Types of Type Casting or Type Conversion

  1. Implicit conversion

    Implicit conversion is being done automatically by the compiler and no data will be lost. It includes conversion of a smaller data type to a larger data types and conversion of derived classes to base class. This is a safe type conversion.
    1. int smallnum = 654667;
    2. // Implicit conversion
    3. long bigNum = smallnum;
    1. class Base
    2. {
    3. public int num1 { get; set; }
    4. }
    5.  
    6. class Derived : Base
    7. {
    8. public int num2 { get; set; }
    9. }
    10.  
    11. class Program
    12. {
    13. static void Main(string[] args)
    14. {
    15. Derived d = new Derived();
    16. //Implicit Conversion
    17. Base b = d;
    18. }
    19. }
  2. Explicit conversion

    Explicit conversion is being done by using a cast operator. It includes conversion of larger data type to smaller data type and conversion of base class to derived classes. In this conversion information might be lost or conversion might not be succeed for some reasons. This is an un-safe type conversion.
    1. long bigNum = 654667;
    2. // Explicit conversion
    3. int smallnum = (int)bigNum;
    1. class Base
    2. {
    3. public int num1 { get; set; }
    4. }
    5.  
    6. class Derived : Base
    7. {
    8. public int num2 { get; set; }
    9. }
    10.  
    11. class Program
    12. {
    13. static void Main(string[] args)
    14. {
    15. Base b = new Base();
    16. //Explicit Conversion
    17. Derived d = (Derived)b;
    18. }
    19. }
  3. User-defined conversion

    User-defined conversion is performed by using special methods that you can define to enable explicit and implicit conversions. It includes conversion of class to struct or basic data type and struct to class or basic data type. Also, all conversions methods must be declared as static.
    1. class RationalNumber
    2. {
    3. int numerator;
    4. int denominator;
    5.  
    6. public RationalNumber(int num, int den)
    7. {
    8. numerator = num;
    9. denominator = den;
    10. }
    11.  
    12. public static implicit operator RationalNumber(int i)
    13. {
    14. // Rational Number equivalant of an int type has 1 as denominator
    15. RationalNumber rationalnum = new RationalNumber(i, 1);
    16. return rationalnum;
    17. }
    18.  
    19. public static explicit operator float(RationalNumber r)
    20. {
    21. float result = ((float)r.numerator) / r.denominator;
    22. return result;
    23. }
    24.  
    25. }
    26. class Program
    27. {
    28. static void Main(string[] args)
    29. {
    30. // Implicit Conversion from int to rational number
    31. RationalNumber rational1 = 23;
    32.  
    33. //Explicit Conversion from rational number to float
    34. RationalNumber rational2 = new RationalNumber(3, 2);
    35. float d = (float)rational2;
    36. }
    37. }

What is the Upcasting and Downcasting?

There are two more casting terms Upcasting and Downcasting. basically these are parts of Implicit conversion and Explicit conversion.
Implicit conversion of derived classes to base class is called Upcasting and Explicit conversion of base class to derived classes is called Downcasting.
  1. class Base
  2. {
  3. public int num1 { get; set; }
  4. }
  5.  
  6. class Derived : Base
  7. {
  8. public int num2 { get; set; }
  9. }
  10.  
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. Derived d1 = new Derived();
  16. //Upcasting
  17. Base b1 = d1;
  18.  
  19. Base b2 = new Base();
  20. //Downcasting
  21. Derived d2 = (Derived)b2;
  22. }
  23. }

Thursday 21 November 2013

Difference Between ASP.NET WebForms and ASP.NET MVC

One of the frequently asked questions about ASP.NET MVC is that how is different from ASP.NET WebForms. Is ASP.NET MVC a replacement for WebForms.
The answer is No. ASP.NET MVC, is not a replacement for WebForms. Both ASP.NET MVC and ASP.NET WebForms are built on top of the Core ASP.NET Framework. In fact a lot of features we use in ASP.NET such as Roles, Membership, Authentication and a lot of namespaces, classes and interfaces can be used in an ASP.NET MVC application
Here are some points that I wrote in an article for www.dotnetcurry.com that differentiate ASP.NET WebForms from ASP.NET MVC:
ASP.NET WebForms
ASP.NET MVC
Uses the ‘Page Controller’ pattern. Each page has a code-behind class that acts as a controller and is responsible for rendering the layout.Uses the ‘Front Controller’ pattern. There is a single central controller for all pages to process web application requests and facilitates a rich routing architecture
Uses an architecture that combines the Controller (code behind) and the View (.aspx). Thus the Controller has a dependency on the View. Due to this, testing and maintainability becomes an issue.ASP.NET MVC enforces a "separation of concerns". The Model does not know anything about the View. The View does not know there’s a Controller. This makes MVC applications easier to test and maintain
The View is called before the Controller.Controller renders View based on actions as a result of the User Interactions on the UI.
At its core, you ‘cannot’ test your controller without instantiating a View. There are ways to get around it using tools.At its core, ASP.NET MVC was designed to make test-driven development easier. You ‘can’ test your Controller without instantiating a View and carry out unit-tests without having to run the controllers in an ASP.NET process.
WebForms manage state by using view state and server-based controls.ASP.NET MVC does not maintain state information by using view state
WebForms supports an event-driven programming style that is like Windows applications and is abstracted from the user. The State management is made transparent by using sessions, viewstate etc. In the process, the HTML output is not clean making it difficult to manage later. The ViewState also increases your page size.In ASP.NET MVC, the output is clean and you have full control over the rendered HTML. The orientation is towards building standard compliant pages and provides full control over the behavior of an application.
Deep understanding of HTML, CSS and JavaScript is not required to a large extent since the WebForm model abstracts a lot of these details and provides automatic plumbing. While abstracting details to provide ease of use, sometimes a solution is overcomplicated, than it needs to be.A thorough understanding of how HTML, CSS and JavaScript work together is required. The advantage is you can do a lot of jQuery and AJAX stuff in an efficient and simple manner than you would do in an ASP.NET application.
WebForms can drastically reduce time while building up intranet and internet applications that use a lot of controls (drag and drop model). Although this is true for development, a lot of time is spent later to code around limitations.You lose the 'drag and drop' quick model of building your web applications. The focus is on control over the application behavior and test-driven development. The model is extensible and you do not have to spend time working around limitations.
Relatively simple to learn and pickup. Works very well for developers who initially have trouble with the HTTP/HTML model and are coming from a similar WinForms oriented event model.There is a learning curve to understand the why, when and how of ASP.NET MVC.
Lesser amount of code is required to build webapps since a lot of components are integrated and provided out of the box. You can also use a lot of data controls provided out of the box that rely on ViewState.Since the application tasks are separated into different components, amount of code required is more. Since ASP.NET MVC does not use ViewState, you cannot use Data controls like GridView, Repeater.
Works very well for small teams where focus is on rapid application developmentWorks well for large projects where focus in on testability and maintainability

Saturday 17 August 2013

Using isnull in where clause is expensive in SQL Server

The statement was similar to this :
(This is just an example)
Select * from CustomerMaster where StateId = isnull(@StateID, [StateId]);
After replacing isnull with ‘Case’  like below, the statement executed faster and the stored procedure ran in few milli seconds.
Select * from CustomerMaster where StateId = (Case @StateID when null then [StateId] else @StateID End);

Wednesday 29 May 2013

Monday 27 May 2013

Explain different constraints to maintain data integrity in SQL Server?

Check constraints:
Check constraints will be useful to limit the range of possible values in a column.
We could create check constraints at two different levels
a) Column-level check constraints are applied only to the column and cannot reference data in another other column
b) Table-level check constraints can reference any column within a table but cannot reference columns in other tables
Default constraints:
Default constraints enable the SQL Server to write default value to a column when user doesn’t specify a value.
Unique constraints:
A unique constraint restricts a column or combination of columns from allowing duplicate values.
Primary key constraints:
Primary key constraints will allow a row to be uniquely identified. This will perform by primary key on the table.
Foreign key constraints:
Foreign keys constraints will ensure that the values that can be entered in a particular column exist in a specified table.

Indexes in SQL Server

What is Index?
Indexes are database objects designed to improve query performance.
By applying indexes to one or more columns in table or views, we could see faster data retrieval from these tables.
Explain the structure of Index in SQL server?
An index is structured by the SQL Server Index Manager as a balanced tree (or Btree). A B-tree is similar to an upside-down tree, means with the root of the tree at the top, the leaf levels at the bottom, and intermediate levels in between.
Each object in the tree structure is a group of sorted index keys called an index page.
All search requests begin at the root of a B-tree and then move through the tree to the appropriate leaf level.
What are the different types of indexes in SQL Server?
There are two types of indexes
• Clustered index
• Non Clustered index
Both types of indexes are indexes are structured as B-Trees.
Explain the difference between clustered index and non clustered index?
Clustered index:
  • A clustered index contains table records in the leaf level of the B-tree.
  • There can be only one clustered index on a table or view, because the clustered index key physically sorts the table or view.
Non Clustered index:
  • A non clustered index contains a bookmark to the table records in the leaf level.
  • If a clustered index exists on a table, a non clustered index uses it to facilitate data lookup.
  • We could create 249 non clustered indexes on a single table.

Explain ASP.Net Catching? What are different catching mechanisms available in ASP.Net?

ASP.Net catching one of the important performance factor for large web applications.
ASP.Net Catching stores frequently accessed data in to catch object.
There are two different types catching in ASP.Net
1.Application Catching
2.Page Output Catching

What are the differences between custom Web control and user control?

Custom Web control is a control that inherits from web server control available in ASP.Net.
A Custom Web Control could be compiled into separate .dll file. This custom Web control can be shared across all application by installing this dll in to Global Assembly Catch.
User Control is a file (.ascx file) that contains a set of ASP.Net controls and code grouped together to provide common functionality across the application. User control can be used on different web pages of the application.

Could you able to apply inheritance to structure type in C#?

No, we could not apply inheritance to structure. Structure types are always sealed.

What are different stages of ASP.Net Page Life cycle?

Each ASP.Net Web page performs following stages/events
  • Page Initialization (Page_Init event)
  • Page Loading (Page_Load event)
  • Page Prerender (Page_Prerender)
  • Page Render (Page_Render)
  • Page Unload (Page_Unload)

Friday 24 May 2013

Difference between Boxing and Unboxing in C# with an Example

Boxing and Unboxing is a  essential concept in .Net’s type system. With Boxing and Unboxing one can link between value-types and reference-types by allowing any value of a value-type to be converted to and from type object.
Boxing
Unboxing
Definition:
Boxing is the process of converting a value type to the reference type.
Unboxing is the process of converting
a reference type to value type
.
Type of Conversion:
Implicit Conversion
Explicit Conversion
Example:
int i = 221;
object obj = i; //boxing
object obj = 213;
i = (int)obj ; // unboxing

Interview Questions Answers

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.

Sealed Class in C#.net

Sealed classes are used to restrict the inheritance feature of object oriented programming. Once a class is defined as sealed class, this class cannot be inherited. 
In C#, the sealed modifier is used to define a class as sealed. In Visual Basic .NET,NotInheritable keyword serves the purpose of sealed. If a class is derived from a sealed class, compiler throws an error. 
If you have ever noticed, structs are sealed. You cannot derive a class from a struct.  

The following class definition defines a sealed class in C#: 
// Sealed class
sealed class SealedClass
{
    } 

In the following code, I create a sealed class SealedClass and use it from Class1. If you run this code, it will work fine. But if you try to derive a class from sealed class, you will get an error.


using System;
class Class1
{
    static void Main(string[] args)
    {
        SealedClass sealedCls = new SealedClass();
        int total = sealedCls.Add(45);
        Console.WriteLine("Total = " + total.ToString());
    }
}
// Sealed class
sealed class SealedClass
{
    public int Add(int x, int y)
    {
        return x + y;
    }
}