Knowledge Transfer

Thursday, January 18, 2007

Abstract && interface with in C#.Net

Introduction
The choice of whether to use an interface or an abstract can sometimes be a difficult one. This article shows you the differences between these two and also tells you when and where to use them.


Interfaces
Interfaces, like classes, define a set of properties, methods, and events. But unlike classes, interfaces do not provide implementation. An interface represents a contract, and a class that implements an interface must implement every aspect of that interface exactly as it is defined.
You declare an interface by using the interface keyword


Example
interface IPerson
{
void Eat();

void Sleep();

int Weight
{
set;
get;
}
}

In order to use this interface, you must declare your class in the same way that you declare a class inheriting from any other object.


Example
public class Man:IPerson
{
int iWeight;

public Man()
{
}

public void Eat()
{
MessageBox.Show("Man:Eat");
}

public void Sleep()
{
MessageBox.Show("Man:Sleep");
}

public int Weight
{
set
{
iWeight = value;
}
get
{
return iWeight;
}
}

static void Main()
{
Man i = new Man();
i.Eat();
i.Sleep();
}

}


You get the following result when you run the above code.
Man:Eat
Man:Sleep

It is important to note here that an interface is very different from a base class. An interface is implemented, not extended.
1.A class can implement multiple interfaces.
2.An interface cannot contain data declarations but you can declare properties.
3.All method declarations in an interface are public.
4.There can be no implementation in an interface.
5.The class implementing the interface must provide implementation code.
6.An interface can be derived from another interface


Abstract Classes
An abstract class is a class that cannot be instantiated, but must be inherited from. An abstract class may be fully implemented, but is more usually partially implemented or not implemented at all, thereby encapsulating common functionality for inherited classes.

When you have a class that contains methods that have no implementation (i.e. abstract methods), the class is said to be abstract as well. An abstract method is simply a shell or place-marker for a method that will be defined later in a derived class. The intention of abstract methods is to force every derivation of the class to implement those methods. If a derived class does not implement an abstract method, then that class must also be declared as abstract.

You declare an interface by using the interface keyword
abstract public class Person
{
abstract public void Eat();

public void Sleep()
{
MessageBox.Show("Person:Sleep");
}

abstract public int Weight
{
set;
get;
}
}

You can inherit the abstract class just like any other class.
public class Man:Person
{
int iWeight;

public Man()
{
}
override public void Eat()
{
MessageBox.Show("Man:Eat");
}
override public int Weight
{
set
{
iWeight = value;
}
get
{
return iWeight;
}
}

static void Main()
{
Man i = new Man();
i.Eat();
i.Sleep();
}
}


You get the following result when you execute the above code.
Man:Eat
Person:Sleep

So why would you declare a class abstract? It’s actually a very powerful class hierarchy design tool since you can provide the structure for something that is not very specific —just like our Person class. You will never create an Person object; but you will create Man and Woman objects. The other advantage is that you are moving the code to where it actually belongs. This helps you locate program logic problems.

A class that is derived from an abstract class may still implement interfaces.

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. If additional functionality is needed in derived classes, it can be added to the base class without breaking code.

In the above example, an abstract class is declared with one implemented method, one unimplemented method and one unimplemented property. A class inheriting from this class would have to implement the Eat method and Weight property

When implementing an abstract class, you must implement each abstract method in that class, and each implemented method must receive the same number and type of arguments, and have the same return value, as the method specified in the abstract class.


Recommendations on using Abstract Classes and Interfaces
1. If you anticipate creating multiple versions of your component, create an abstract class. Abstract classes provide a simple and easy way to version your components. By updating the base class, all inheriting classes are automatically updated with the change. Interfaces, on the other hand, cannot be changed once created. If a new version of an interface is required, you must create a whole new interface.
2. If the functionality you are creating will be useful across a wide range of disparate objects, use an interface. Abstract classes should be used primarily for objects that are closely related, whereas interfaces are best suited for providing common functionality to unrelated classes.
3. If you are designing small, concise bits of functionality, use interfaces. If you are designing large functional units, use an abstract class.
4. If you want to provide common, implemented functionality among all implementations of your component, use an abstract class. Abstract classes allow you to partially implement your class, whereas interfaces contain no implementation for any members.


Abstract class vs. interfaces
Abstract class Interface
May or may not have abstract methods. Can only have abstract methods (Implicitly abstract) but abstract keyword is not allowed.
Methods can have access modifiers. No access modifier is allowed, implicitly public.
Can have fields. Not intended to define fields.
Can be instantiated via sub-class. Can be instantiated via implementing class.
Can extend a Single class, implement one or more interfaces. Cannot extend a class, Can extend single or multiple interfaces.
Abstract classes form part of the inheritance scheme Interfaces do not. We can use the same interface in two projects that are not related in terms of inheritance. For example an interface IWheel can be implemented in a Car project and also a Bicycle project.
Can have constructor. Can't have constructor.
A class, by comparison, can only extend ("implementation inheritance") one other class Interfaces provide a form of multiple inheritance ("interface inheritance"), because you can implement multiple interfaces.
An abstract class can have static methods, protected parts, and a partial implementation. Interfaces are limited to public methods and constants with no implementation allowed.


if you want some more Stuff on this topic then Click here
Click Here


Labels: , , ,

How can i break line in message box?

this is the way to break the message:

MessageBox.Show (“This Text is displayed in First Line” & vbcrlf &
“This Text is displayed in Second Line”)

Tuesday, January 16, 2007

.Net Framework

Introduction

In this article we are going to look at Microsoft .NET Framework. This is the newly established software development environment which helps developers to develop applications quickly and gives optimum, efficient, scalable, performance oriented applications in different languages like Visual Basic .NET, C#, ASP .NET, and Jscript .NET etc…

Overview of the .NET Framework

The .NET Framework is a new computing platform that simplifies application development in the highly distributed environment of the Internet.

Services

NET Framework provides the following services:
· Tools for developing software applications,
· run-time environments for software application to execute,
· server infrastructure,
· value added intelligent software which helps developers to do less coding and work efficiently,
The .Net Framework will enable developers to develop applications for various devices and platforms like windows application web applications windows services and web services.

Objectives

The .NET Framework is designed to fulfill the following objectives:
· A consistent object-oriented programming environment, where object code can be stored and executed locally, executed locally but Internet-distributed, or executed remotely.
· A code-execution environment that minimizes software deployment and versioning conflicts.
· A code-execution environment that guarantees safe execution of code, including code created by an unknown or semi-trusted third party.
· A code-execution environment that eliminates the performance problems of scripted or interpreted environments.
· Developers can experience consistency across widely varying types of applications, such as Windows-based applications and Web-based applications.
· Build all communication on industry standards to ensure that code based on the .NET Framework can integrate with any other code.

Understanding the .NET Framework Architecture

The .NET Framework has two components: the .NET Framework class library and the common language runtime.
The .NET Framework class library facilitates types (CTS) that are common to all

.NET languages.

The common language runtime consists of (class loader) that load the IL code of a program into the runtime, which compiles the IL code into native code, and executes and manage the code to enforce security and type safety, and provide thread support.



.NET Framework Architecture has languages at the top such as VB .NET C#, VJ#, VC++ .NET; developers can develop (using any of above languages) applications such as Windows Forms, Web Form, Windows Services and XML Web Services. Bottom two layers consist of .NET Framework class library and Common Language Runtime. This we are going to understand using this article.

Understanding the Roll of .NET Framework.

The .NET Framework has two main components: the common language runtime (CLR) and the .NET Framework class library. The common language runtime is the foundation of the .NET Framework. CLR act as an agent that manages code at execution time, providing core services such as memory management, thread management, and remoting, while also enforcing strict type safety and facilitates with code accuracy that ensure security and robustness. The concept of code management is a fundamental principle of the CLR. Code that targets the CLR is known as managed code, while code that does not target the CLR is known as unmanaged code.

The class library, is a integral component of the .NET Framework, consists of object-oriented collection of reusable classes (types) that we can use to develop applications ranging from traditional command-line or any graphical user interface (GUI) applications such as Windows Forms, ASP. NET Web Forms and Windows Services the newly invented XML Web services.

The European Computer Manufacturers Association (ECMA) standard has defines the Common Language Specification (CLS); this enforces that software development languages should be interoperable between them. The code written in a CLS should be compliant with the code written in another CLS-compliant language. Because the code supported by CLS-compliant language should be compiled into an intermediate language (IL) code. The CLR engine executes the IL code. This ensures interoperability between CLS-compliant languages. Microsoft .NET Framework supports Languages like Microsoft Visual Basic .NET, Microsoft Visual C#, Microsoft Visual C++ .NET, and Microsoft Visual J# .NET.

The language compilers generate an Intermediate Language code, called Microsoft Intermediate Language (MSIL), which makes programs written in the .NET languages interoperable across languages.

The ECMA standard, Common Language Infrastructure (CLI), defines the specifications for the infrastructure that the IL code needs for execution. The CLI provides a common type system (CTS) and services such as type safety, managed code execution and side by side execution.



Figure 1. ECMA Standards under Microsoft .NET Framework.
The .NET Framework provides the infrastructure and services. The CLI specifications. These include:
· Common language runtime.
o The CLR includes the CLI,
o The CLR also provides the execution environment for .NET Applications.
· Common type system.
o Provides the data types, values, object types. This helps developers to develop applications in different languages.Where .NET languages share CTS mean all the types used in applications shares the same types defined under CLI.
· Type safety.
o .NET Framework performs operations on the values or objects for which .NET Framework requires each value or object has a type and which reference to the value or object type.
· Managed code execution.
o .NET Framework manages the state of the object while executing the .NET Applications.
o .NET Framework automatically allocates memory and provides garbage collation mechanism to de-allocate memory.
· Side-by-side execution.
o .NET Framework allows different version of the same application to run on the same machine by using assemblies of different versions. Assemblies consist of IL Code and Metadata. Where metadata determines the application dependencies. By this .NET Framework Runtime executes multiple version of assembly and solves the major problem of legacy development environment. That is the “DLL HELL”.

.NET Assembly



Figure 2 Side-by-side Execution.


Understanding .NET Framework CLR

The common language runtime facilitates the followings:
· Run-time environment
o CLR Compiles application into the runtime, compile the IL code into native code, execute the code
· Run-time services.
o Memory management,
o Type safety,
o Enforces Security,
o Exception Management.
o Thread support
o Debugging support



Understanding Architecture of .NET Framework CLR




· Class loader, which loads classes into CLR.
· MSIL to native code compiles, this converts MSIL code into native code.
· Code manager, this manages the code during execution.
· Memory allocation and Garbage collector, this performs automatic memory management.
· Security engine, this enforces security restrictions as code level security folder level and machine level security using tools provided by Microsoft .NET and using .NET Framework setting under control panel.
· Type checker, which enforces strict type checking.
· Thread support, which provides multithreading support to applications.
· Exception manager, which provides a mechanism to handle the run-time exceptions handling.
· Debug engine, which allows developer to debug different types of applications.
· COM marshaler, which allows .NET applications to exchange data with COM applications.
· Base class library support, which provides the classes (types) that the applications need at run time.

Features of the Common Language Runtime

The CLR has the following Fractures
· Manages memory,
o Allocation of Memory
o De-Allocation of Memory (garbage collation)
· Thread execution support,
· Code execution,
· Code safety verification,
· Compilation.
o MSIL to Native Code.
· Code Security based on Trust (granted permission to execute code. Code level, Folder level, Machine level) These features are intrinsic to the managed code that runs on the common language runtime.

Understanding CLR

To execute the program and gain all the benefits of managed execution environment we write code in a language which is supported by CLS that is .NET Framework. The language compiler compiles the source code into the MSIL code which consists of CPU- independent code and instructions which is platform independent. MSIL consists of the followings:
· Instructions that enables to perform arithmetic and logical operations
· Access memory directly.
· Control the flow of execution,
· Handles exceptions,
MSIL code can be compiling into CPU specific instructions before executing, for which the CLR requires information about the code which is nothing but metadata. Metadata describes the code and defines the types that the code contains as well referenced to other types which the code uses at run time.
An assembly consists of portable executable file. At the time of executing PE file the class loader loads the MSIL code and the metadata form the portable executable file into the run time memory.
Before the execution of PE file it passes the code to the native code compiler for compilation, IL to native code compilation is done by JIT compiler. For different CPU architecture and compilers for the IL code in to the native instructions.

Futures of CLR
· Managed multithreading support and monitor the threads. Application domain contains one or more threads to execute.
· Manages interoperability with unmanaged code, and COM marshaling
· A structured exception handling mechanism,
· The infrastructure and managed execution process, memory management and garbage collection.

Architecture of CLR



· Base class library support supports al the base classes used for .net languages to support basic functionality
· COM Marshaler supports Marshaling of data between COM objects.
· Exception management supports handling Errors at runtime using try catch finally blocks.
· Security engine enforces security rules at runtime.
· Type checker checks for Type safe checks at runtime.
· Debug engine supports debugging at runtime.
· Code manger manages the Managed code at runtime.
· IL to native compiler compiles the MSIL code to the Native code which is machine independent
· Garbage collector supports the Memory management and supports Clearing unused memory at runtime.
· Class loader lodes the classes at runtime


Understanding JIT compiler

JIT compiler compiles is the integral part of CLR. the MSIL code to Native code and executes the batch of code Just in time which will be cached and next time when the code gets executed from cache in stud of compiling again.



JIT Execution process.

CLR class loader lodes MSIL code and metadata are loaded into memory; the code manager calls the entry point method which is WinMain or DLLMain method. The JIT compiler compiles the method to before its execution of the entry point method. The code manager places the objects in memory and controls the execution of the code. The garbage collector performs periodic checks on the managed heap to identify the objects which is not in use for the application.
At the time of program execution the type checker ensures that all objects and values, and the references of objects and values has its valid type. The type checker also makes sure that only valid operations are performed on the code other wise the exception will be thrown. The code is controlled by CLR at run time. CLR enforces security in following manner.
· To control and access the system recourses like hard disk
· To control and access the network connections
· To control and access the other hard ware resources.

Managed code Execution

Managed code execution is known as the process executed by the CLR which is as follows:
· CLR loads the MSIL & refers metadata,
· CLR executes the Native code,
· CLR provides automatic memory management.
· Managed execution also performs JIT compilations,
· Ensuring type safety,
· Enforcing security,
· Handling exceptions.

Managed Execution Process
· Managed code is self-explanatory code which gives information to CLR for multiple runtime services in .NET Framework.
· This information is stored in MSIL code in the form of metadata inside the PE file. Mata data information will describe the types that the code contains.
· Managed data is allocated and released from memory automatically by garbage collection. Managed data can be accessible form managed code but managed code can be accessible from managed and unmanaged data.

Memory Management

Automatic memory management means no need to write code to allocate memory when objects are created or to release memory when objects are not required the application.
The process of automatic memory management involves the following tasks:

Ø Allocating memory
· When a process is initialized, the runtime reserves a contiguous address space without allocating any storage space for it.
· This reserved address space is called a managed heap. The managed heap keeps a pointer at the location where the next object will be located.
· When an application uses the new operator to create an object, the new operator checks whether the memory required by the object is available on the heap.
· When the next object is created, the garbage collector allocates memory to the object on the managed heap.
· Allocating memory to the objects in a managed heap takes less time than allocating unmanaged memory.
· In unmanaged memory, the pointers to memory are maintained in linked-list data structures. Therefore, allocating memory requires navigating through the linked list, finding a large memory block to accommodate the
· You can access objects in managed memory faster than objects in unmanaged memory because in managed memory allocation, objects are created contiguously in the managed address space.

Ø Releasing Memory
· The garbage collector periodically releases memory from the objects that are no longer required by the application.
· Every application has a set of roots. Roots point to the storage location on the managed heap. Each root either refers to an object on the managed heap or is set to null.
· An application's roots consist of global and static object pointers, local variables, and reference object parameters on a thread stack.
· The JIT compiler and the run-time maintain the list of the application roots. The garbage collector uses this list to create a graph of objects on the managed heap that are reachable from the root list.
· When the garbage collector starts running, it considers all the objects on the managed heap as garbage.
· The garbage collector navigates through the application root list, it identifies the objects that have corresponding references in the application root list and marks them as reachable.
· The garbage collector also considers such objects as reachable objects.
· The garbage collector considers all unreachable objects on the managed heap as garbage.
· The garbage collector performs a collection process to free the memory occupied by the garbage objects.
· The garbage collector performs the memory copy function to compress the objects in the managed heap.
· The garbage collector updates the pointers in the application root list so that the application roots correctly point to the objects to which they were pointing earlier.
· The garbage collector uses a highly optimized mechanism to perform garbage collection. It divides the objects on the managed heap into three generations: 0, 1, and 2. Generation 0 contains recently created objects.
· The garbage collector first collects the unreachable objects in generation 0. Next, the garbage collector compacts memory and promotes the reachable objects to generation 1.
· The objects that survive the collection process are promoted to higher generations.
· The garbage collector searches for unreachable objects in generations 1 and 2 only when the memory released by the collection process of generation 0 objects is insufficient to create the new object.
· The garbage collector manages memory for all managed objects created by the application.
· The garbage collection can explicitly release these system resources by providing the cleanup code in the Dispose method of the object.
· We need to explicitly call the Dispose method after you finish working with the object.

Ø Implementing Finalizers
· The finalization process allows an object to perform cleanup tasks automatically before garbage collection starts.
· The Finalize method ensures that even if the client does not call the Dispose method explicitly, the resources used by the object are released from memory when the object is garbage collected.
· After the garbage collector identifies the object as garbage during garbage collection, it calls the Finalize method on the object before releasing memory.
· Finalizers are the methods that contain the cleanup code that is executed before the object is garbage collected. The process of executing cleanup code is called finalization. The Dispose and Finalize methods are called finalizers.
· The Dispose method of an object should release all its resources in addition to the resources owned by its parent object by calling the Dispose method of the ?parent object.
· We can execute the Dispose method in two ways.
o The user of the class can call the Dispose method on the object that is being disposed, or
o The Finalize method can call the Dispose method during the finalization process.
.NET Framework Tools

Assembly Linker
Al.exe Tool
· tool can create an assembly or resource file with the manifest in a separate file out of modules.
Syntax: al [source] [options]
· This tool allows us to create multi-file assembly outside .NET. A multi-file assembly is useful to combine modules developed under different .NET languages into a single application.
IL Assembler
Ilasm.exe Tool
· When we compile managed code, the code is converted into MSIL code; this is CPU independent language which is converted to native code.
· We can use Ilasm tool to generate a portable executable (PE) file from the MSIL code. The resulting executable file is performance optimized, where the Ilasm tool does not create intermediate object file Syntex:
Ilasm [source] filename [options]
· We can specify multiple source files to produce a single PE file.
IL Disassembler
Ildasm.exe Tool
· Ildasm tool is used to view PE file contains that is nothing but the MSIL code as a parameter and creates the text file that consists of managed code.
Code Access Security Policy Tool
Caspol.exe Tool
· Caspool is nothing but Code Access Security Policy tool, which allows us to grant and modify permissions granted to code groups at the user-policy, machine-policy, and enterprise-policy levels. Etc…
Syntex: caspol [options]

.NET Framework Configuration Tool
Mscorcfg.msc
· With this tool we can manage and configure assemblies in to the global assembly cache. And also manage the code access security along with remoting services.
· This tool also creates code group policies at user level- policies, machine level-policies, and enterprise level policies to assign and remove the permissions on assemblies within .NET Framework.

Microsoft Certified Exam




HI Pals...This is MCP/MCAD Exam MOdel list.Prepare well..All the Best