Friday, January 11, 2013

Modifiers in C#


Access Modifiers: Access modifiers are keywords used to specify the declared accessibility of a member or a type. This section introduces the four access modifiers: public, protected, internal & private
The following five accessibility levels can be specified using the access modifiers:
  • public: Access is not restricted.
  • protected: Access is limited to the containing class or types derived from the containing class.
  • Internal: Access is limited to the current assembly.
  • protected internal: Access is limited to the current assembly or types derived from the containing class.
  • private: Access is limited to the containing type.

Other Modifiers: 


  • abstract - Indicates that a class is intended only to be a base class of other classes.
  • const - Specifies that the value of the field or the local variable cannot be modified.
  • event - Declares an event.
  • extern - Indicates that the method is implemented externally.
  • new - Hides an inherited member from a base class member.
  • override - Provides a new implementation of a virtual member inherited from a base class.
  • partial - Defines partial classes, structs and methods throughout the same assembly.
  • readonly - Declares a field that can only be assigned values as part of the declaration or in a constructor in the same class.
  • sealed - Specifies that a class cannot be inherited.
  • static - Declares a member that belongs to the type itself instead of to a specific object.
  • unsafe - Declares an unsafe context.
  • virtual - Declares a method or an accessor whose implementation can be changed by an overriding member in a derived class.
  • volatile - Indicates that a field can be modified in the program by something such as the operating system, the hardware, or a concurrently executing thread.

Thursday, January 10, 2013

What is an Interface, Abstract Class? What are the differences between them?



Interface - Interfaces, like classes, define a set of properties, methods, and events. But unlike classes, interfaces do not provide implementation. They are implemented by classes, and defined as separate entities from classes. An interface represents a contract, in that a class that implements an interface must implement every aspect of that interface exactly as it is defined.

Abstract Class - Abstract classes are closely related to interfaces. They are classes that cannot be instantiated, and are frequently either partially implemented, or not at all implemented. Abstract classes are useful when creating components because they allow you specify an invariant level of functionality in some methods, but leave the implementation of other methods until a specific implementation of that class is needed. They also version well, because if additional functionality is needed in derived classes, it can be added to the base class without breaking code.

The main difference between them is that a class can implement more than one interface but can only inherit from one abstract class. Since C# doesn’t support multiple inheritance, interfaces are used to implement multiple inheritance.

Differences between Interface and Abstract Class:
Feature
Interface
Abstract class
Multiple inheritance
A class may inherit several interfaces.
A class may inherit only one abstract class.
Default implementation
An interface cannot provide any code, just the signature.
An abstract class can provide complete, default code and/or just the details that have to be overridden.
Access Modfiers
An interface cannot have access modifiers for the subs, functions, properties etc everything is assumed as public
An abstract class can contain access modifiers for the subs, functions, properties
Core VS Peripheral
Interfaces are used to define the peripheral abilities of a class. In other words both Human and Vehicle can inherit from a IMovable interface.
An abstract class defines the core identity of a class and there it is used for objects of the same type.
Homogeneity
If various implementations only share method signatures then it is better to use Interfaces.
If various implementations are of the same kind and use common behaviour or status then abstract class is better to use.
Speed
Requires more time to find the actual method in the corresponding classes.
Fast
Adding functionality (Versioning)
If we add a new method to an Interface then we have to track down all the implementations of the interface and define implementation for the new method.
If we add a new method to an abstract class then we have the option of providing default implementation and therefore all the existing code might work properly.
Fields and Constants
No fields can be defined in interfaces
An abstract class can have fields and constants defined