Boxing and UnBoxing

 

 

Boxing and unboxing enable value types to be treated as objects. Boxing a value type packages it inside an instance of the Object reference type. This allows the value type to be stored on the garbage collected heap. Unboxing extracts the value type from the object. In this example, the integer variable i is boxed and assigned to object o.

int i = 123;
object o = (object)i;  // boxing

The object o can then be unboxed and assigned to integer variable i

o = 123;
i = (int)o;  // unboxing

 

Performance

In relation to simple assignments, boxing and unboxing are computationally expensive processes. When a value type is boxed, an entirely new object must be allocated and constructed.This can take up to 20 times longer than an assignment.  To a lesser degree, the cast required for unboxing is also expensive computationally. When unboxing, the casting process can take 4 times as long as an assignment. For more information, see Performance.

 

 

 


Bookmark and Share

SMS service to send Message to a URL

Here is the sample code for same , I used it for implementing SMS service in project that sends message to particular URL which in turn sends SMS to particualr phone number,

using System.Net;

using System.Xml;

XmlDocument xDoc = new XmlDocument();

//xDoc = ; //some xml data

Byte[] outputbyte;

string sXML = “”;

string strResult = “”;

String URL = “http://someurl.com/”;//url that

Byte[] inputbyte = System.Text.Encoding.ASCII.GetBytes(xDoc.OuterXml);

WebClient wc = new WebClient();

wc.Headers.Add(“Content-Type”, “text/xml”);

outputbyte = wc.UploadData(URL, inputbyte);//will upload a byte of data to specific url service

sXML = System.Text.Encoding.ASCII.GetString(outputbyte);

System.Xml.XmlDocument xmlData = new System.Xml.XmlDocument();

xmlData.LoadXml(sXML); // will load whole xml and now you can traverse to any xml node.


Bookmark and Share

GZipStream Class to Compress and Decompress Stream Data

Provides methods and properties used to compress and decompress streams.

Namespace: System.IO.Compression
Assembly: System (in system.dll)

 

This class represents the gzip data format, which uses an industry standard algorithm for lossless file compression and decompression. The format includes a cyclic redundancy check value for detecting data corruption. The gzip data format uses the same algorithm as the DeflateStream class, but can be extended to use other compression formats. The format can be readily implemented in a manner not covered by patents. The format for gzip is available from the RFC 1952, “GZIP .” This class cannot be used to compress files larger than 4 GB.

 

Notes to Inheritors When you inherit from GZipStream, you must override the following members: CanSeek, CanWrite, and CanRead.

 

 Example

The following code example shows how to use the GZipStream class to compress and decompress a file.

using System;
using System.IO;
using System.IO.Compression;

public class GZipTest
{
    public static int ReadAllBytesFromStream(Stream stream, byte[] buffer)
    {
    // Use this method is used to read all bytes from a stream.
    int offset = 0;
    int totalCount = 0;
        while (true)
        {
        int bytesRead = stream.Read(buffer, offset, 100);
            if ( bytesRead == 0)
            {
            break;
            }
    offset += bytesRead;
    totalCount += bytesRead;
        }
    return totalCount;
    }

    public static bool CompareData(byte[] buf1, int len1, byte[] buf2, int len2)
    {
        // Use this method to compare data from two different buffers.
        if (len1 != len2)
        {
        Console.WriteLine(“Number of bytes in two buffer are different {0}:{1}”, len1, len2);
        return false;
        }

        for ( int i= 0; i< len1; i++)
        {
            if ( buf1[i] != buf2[i])
            {
            Console.WriteLine(“byte {0} is different {1}|{2}”, i, buf1[i], buf2[i]);
            return false;
            }
        }
    Console.WriteLine(“All bytes compare.”);
    return true;
    }

    public static void GZipCompressDecompress(string filename)
    {
    Console.WriteLine(“Test compression and decompression on file {0}”, filename);
    FileStream infile;
        try
        {
        // Open the file as a FileStream object.
        infile = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
        byte[] buffer = new byte[infile.Length];
        // Read the file to ensure it is readable.
        int count = infile.Read(buffer, 0, buffer.Length);
            if ( count != buffer.Length)
            {
            infile.Close();
            Console.WriteLine(“Test Failed: Unable to read data from file”);
            return;
            }
        infile.Close();
        MemoryStream ms = new MemoryStream();
        // Use the newly created memory stream for the compressed data.
        GZipStream compressedzipStream = new GZipStream(ms , CompressionMode.Compress, true);
        Console.WriteLine(“Compression”);
        compressedzipStream.Write(buffer, 0, buffer.Length);
        // Close the stream.
        compressedzipStream.Close();
        Console.WriteLine(“Original size: {0}, Compressed size: {1}”, buffer.Length, ms.Length);

        // Reset the memory stream position to begin decompression.
        ms.Position = 0;
        GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);
        Console.WriteLine(“Decompression”);
        byte[] decompressedBuffer = new byte[buffer.Length + 100];
        // Use the ReadAllBytesFromStream to read the stream.
        int totalCount = GZipTest.ReadAllBytesFromStream(zipStream, decompressedBuffer);
        Console.WriteLine(“Decompressed {0} bytes”, totalCount);

        if( !GZipTest.CompareData(buffer, buffer.Length, decompressedBuffer, totalCount) )
        {
        Console.WriteLine(“Error. The two buffers did not compare.”);
        }
    zipStream.Close();
        } // end try
        catch (InvalidDataException)
        {
            Console.WriteLine(“Error: The file being read contains invalid data.”);
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine(“Error:The file specified was not found.”);
        }
        catch (ArgumentException)
        {
            Console.WriteLine(“Error: path is a zero-length string, contains only white space, or contains one or more invalid characters”);
        }
        catch (PathTooLongException)
        {
            Console.WriteLine(“Error: The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.”);
        }
        catch (DirectoryNotFoundException)
        {
            Console.WriteLine(“Error: The specified path is invalid, such as being on an unmapped drive.”);
        }
        catch (IOException)
        {
            Console.WriteLine(“Error: An I/O error occurred while opening the file.”);
        }
        catch (UnauthorizedAccessException)
        {
            Console.WriteLine(“Error: path specified a file that is read-only, the path is a directory, or caller does not have the required permissions.”);
        }
        catch (IndexOutOfRangeException)
        {
            Console.WriteLine(“Error: You must provide parameters for MyGZIP.”);
        }
    }
    public static void Main(string[] args)
    {
        string usageText = “Usage: MYGZIP <inputfilename>”;
        //If no file name is specified, write usage text.
        if (args.Length == 0)
        {
            Console.WriteLine(usageText);
        }
        else
        {
            if (File.Exists(args[0]))
                GZipCompressDecompress(args[0]);
        }
    }
}
   

Demo Application:

 

Default.aspx :

 

<%@ Page Language=”VB” AutoEventWireup=”false” CodeFile=”Default.aspx.vb” Inherits=”_Default” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” >

<head runat=”server”>

<title>Compression Demo</title>

</head>

<body style=”margin-top:10; margin-left:0″>

<form id=”form1″ runat=”server”>

<div>

<asp:Panel ID=”Panel1″ runat=”server” Height=”500px” Width=”100%” HorizontalAlign=”Center”>

<asp:Label ID=”Label1″ runat=”server” Font-Bold=”True” Font-Size=”Large” Font-Underline=”True”

Text=”File Upload & Compression Tutorial”></asp:Label><br />

<br />

<table style=”width: 100%”>

<tr>

<td align=”right”>

<asp:Label ID=”Label2″ runat=”server” Text=”File to upload and compress: “ Width=”100%”></asp:Label></td>

<td style=”width: 100px” align=”left”>

<input id=”fileUpload” type=”file” runat=”server” />

</td>

</tr>

<tr>

<td>

</td>

<td style=”width: 50%” align=”left”>

<asp:Button ID=”btnUpload” runat=”server” Text=”Upload” />

<asp:Button ID=”btnCompress” runat=”server” Text=”Upload & Compress” /></td>

</tr>

<tr>

<td>

</td>

<td align=”left”>

<asp:Label ID=”lblResult” runat=”server” Font-Bold=”True” ForeColor=”RoyalBlue” Width=”100%”></asp:Label></td>

</tr>

</table>

</asp:Panel>

</div>

</form>

</body>

</html>

Default.aspx.cs :

Imports System.IO

Imports System.IO.Compression

 

Partial Class _Default

Inherits System.Web.UI.Page

 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click

If fileUpload.PostedFile Is Nothing Then

Me.lblResult.Text = “No File Selected to Upload.”

Exit Sub

End If

‘Retrieve file information and upload to server.

Dim strName As String

strName = System.IO.Path.GetFileName(fileUpload.PostedFile.FileName)

Try

fileUpload.PostedFile.SaveAs(Server.MapPath(strName))

Me.lblResult.Text = “””” + strName + “”” was uploaded successfully.”

Catch ex As Exception

Me.lblResult.Text = “An Error Occured While Uploading File.”

End Try

End Sub

Protected Sub btnUploadCompressed_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCompress.Click

If fileUpload.PostedFile Is Nothing Then

Me.lblResult.Text = “No File Selected to Upload.”

Exit Sub

End If

Try

‘A String object reads the file name (locally)

Dim strName As String = System.IO.Path.GetFileName(fileUpload.PostedFile.FileName)

‘Create a stream object to read the file.

Dim myStream As Stream = fileUpload.PostedFile.InputStream

‘Allocate space in buffer for use according to length of file.

Dim myBuffer(myStream.Length) As Byte

‘Read the file using the Stream object and fill the buffer.

myStream.Read(myBuffer, 0, myBuffer.Length)

myStream.Close()

‘Change the extension of the file creating a FileStream object.

Dim myCompressedFile As FileStream = File.Create(Server.MapPath(Path.ChangeExtension(strName, “rar”)))

‘GZip object that compress the file

Dim myStreamZip As New System.IO.Compression.GZipStream(myCompressedFile, CompressionMode.Compress)

‘Write Back

myStreamZip.Write(myBuffer, 0, myBuffer.Length)

myStreamZip.Close()

Me.lblResult.Text = “””” + strName + “”” was uploaded successfully and compressed.”

Catch ex As Exception

Me.lblResult.Text = “An Error Occured While Uploading File.”

End Try

End Sub

End Class


Bookmark and Share

GZipStream Class to Compress and Decompress Stream Data

Provides methods and properties used to compress and decompress streams.

Namespace: System.IO.Compression
Assembly: System (in system.dll)

 

This class represents the gzip data format, which uses an industry standard algorithm for lossless file compression and decompression. The format includes a cyclic redundancy check value for detecting data corruption. The gzip data format uses the same algorithm as the DeflateStream class, but can be extended to use other compression formats. The format can be readily implemented in a manner not covered by patents. The format for gzip is available from the RFC 1952, “GZIP .” This class cannot be used to compress files larger than 4 GB.

 

Notes to Inheritors When you inherit from GZipStream, you must override the following members: CanSeek, CanWrite, and CanRead.

 

 Example

The following code example shows how to use the GZipStream class to compress and decompress a file.

using System;
using System.IO;
using System.IO.Compression;

public class GZipTest
{
    public static int ReadAllBytesFromStream(Stream stream, byte[] buffer)
    {
    // Use this method is used to read all bytes from a stream.
    int offset = 0;
    int totalCount = 0;
        while (true)
        {
        int bytesRead = stream.Read(buffer, offset, 100);
            if ( bytesRead == 0)
            {
            break;
            }
    offset += bytesRead;
    totalCount += bytesRead;
        }
    return totalCount;
    }

    public static bool CompareData(byte[] buf1, int len1, byte[] buf2, int len2)
    {
        // Use this method to compare data from two different buffers.
        if (len1 != len2)
        {
        Console.WriteLine(“Number of bytes in two buffer are different {0}:{1}”, len1, len2);
        return false;
        }

        for ( int i= 0; i< len1; i++)
        {
            if ( buf1[i] != buf2[i])
            {
            Console.WriteLine(“byte {0} is different {1}|{2}”, i, buf1[i], buf2[i]);
            return false;
            }
        }
    Console.WriteLine(“All bytes compare.”);
    return true;
    }

    public static void GZipCompressDecompress(string filename)
    {
    Console.WriteLine(“Test compression and decompression on file {0}”, filename);
    FileStream infile;
        try
        {
        // Open the file as a FileStream object.
        infile = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
        byte[] buffer = new byte[infile.Length];
        // Read the file to ensure it is readable.
        int count = infile.Read(buffer, 0, buffer.Length);
            if ( count != buffer.Length)
            {
            infile.Close();
            Console.WriteLine(“Test Failed: Unable to read data from file”);
            return;
            }
        infile.Close();
        MemoryStream ms = new MemoryStream();
        // Use the newly created memory stream for the compressed data.
        GZipStream compressedzipStream = new GZipStream(ms , CompressionMode.Compress, true);
        Console.WriteLine(“Compression”);
        compressedzipStream.Write(buffer, 0, buffer.Length);
        // Close the stream.
        compressedzipStream.Close();
        Console.WriteLine(“Original size: {0}, Compressed size: {1}”, buffer.Length, ms.Length);

        // Reset the memory stream position to begin decompression.
        ms.Position = 0;
        GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);
        Console.WriteLine(“Decompression”);
        byte[] decompressedBuffer = new byte[buffer.Length + 100];
        // Use the ReadAllBytesFromStream to read the stream.
        int totalCount = GZipTest.ReadAllBytesFromStream(zipStream, decompressedBuffer);
        Console.WriteLine(“Decompressed {0} bytes”, totalCount);

        if( !GZipTest.CompareData(buffer, buffer.Length, decompressedBuffer, totalCount) )
        {
        Console.WriteLine(“Error. The two buffers did not compare.”);
        }
    zipStream.Close();
        } // end try
        catch (InvalidDataException)
        {
            Console.WriteLine(“Error: The file being read contains invalid data.”);
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine(“Error:The file specified was not found.”);
        }
        catch (ArgumentException)
        {
            Console.WriteLine(“Error: path is a zero-length string, contains only white space, or contains one or more invalid characters”);
        }
        catch (PathTooLongException)
        {
            Console.WriteLine(“Error: The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.”);
        }
        catch (DirectoryNotFoundException)
        {
            Console.WriteLine(“Error: The specified path is invalid, such as being on an unmapped drive.”);
        }
        catch (IOException)
        {
            Console.WriteLine(“Error: An I/O error occurred while opening the file.”);
        }
        catch (UnauthorizedAccessException)
        {
            Console.WriteLine(“Error: path specified a file that is read-only, the path is a directory, or caller does not have the required permissions.”);
        }
        catch (IndexOutOfRangeException)
        {
            Console.WriteLine(“Error: You must provide parameters for MyGZIP.”);
        }
    }
    public static void Main(string[] args)
    {
        string usageText = “Usage: MYGZIP <inputfilename>”;
        //If no file name is specified, write usage text.
        if (args.Length == 0)
        {
            Console.WriteLine(usageText);
        }
        else
        {
            if (File.Exists(args[0]))
                GZipCompressDecompress(args[0]);
        }
    }
}
   

Demo Application:

 

Default.aspx :

 

<%@ Page Language=”VB” AutoEventWireup=”false” CodeFile=”Default.aspx.vb” Inherits=”_Default” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” >

<head runat=”server”>

<title>Compression Demo</title>

</head>

<body style=”margin-top:10; margin-left:0″>

<form id=”form1″ runat=”server”>

<div>

<asp:Panel ID=”Panel1″ runat=”server” Height=”500px” Width=”100%” HorizontalAlign=”Center”>

<asp:Label ID=”Label1″ runat=”server” Font-Bold=”True” Font-Size=”Large” Font-Underline=”True”

Text=”File Upload & Compression Tutorial”></asp:Label><br />

<br />

<table style=”width: 100%”>

<tr>

<td align=”right”>

<asp:Label ID=”Label2″ runat=”server” Text=”File to upload and compress: “ Width=”100%”></asp:Label></td>

<td style=”width: 100px” align=”left”>

<input id=”fileUpload” type=”file” runat=”server” />

</td>

</tr>

<tr>

<td>

</td>

<td style=”width: 50%” align=”left”>

<asp:Button ID=”btnUpload” runat=”server” Text=”Upload” />

<asp:Button ID=”btnCompress” runat=”server” Text=”Upload & Compress” /></td>

</tr>

<tr>

<td>

</td>

<td align=”left”>

<asp:Label ID=”lblResult” runat=”server” Font-Bold=”True” ForeColor=”RoyalBlue” Width=”100%”></asp:Label></td>

</tr>

</table>

</asp:Panel>

</div>

</form>

</body>

</html>

Default.aspx.cs :

Imports System.IO

Imports System.IO.Compression

 

Partial Class _Default

Inherits System.Web.UI.Page

 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click

If fileUpload.PostedFile Is Nothing Then

Me.lblResult.Text = “No File Selected to Upload.”

Exit Sub

End If

‘Retrieve file information and upload to server.

Dim strName As String

strName = System.IO.Path.GetFileName(fileUpload.PostedFile.FileName)

Try

fileUpload.PostedFile.SaveAs(Server.MapPath(strName))

Me.lblResult.Text = “””” + strName + “”” was uploaded successfully.”

Catch ex As Exception

Me.lblResult.Text = “An Error Occured While Uploading File.”

End Try

End Sub

Protected Sub btnUploadCompressed_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCompress.Click

If fileUpload.PostedFile Is Nothing Then

Me.lblResult.Text = “No File Selected to Upload.”

Exit Sub

End If

Try

‘A String object reads the file name (locally)

Dim strName As String = System.IO.Path.GetFileName(fileUpload.PostedFile.FileName)

‘Create a stream object to read the file.

Dim myStream As Stream = fileUpload.PostedFile.InputStream

‘Allocate space in buffer for use according to length of file.

Dim myBuffer(myStream.Length) As Byte

‘Read the file using the Stream object and fill the buffer.

myStream.Read(myBuffer, 0, myBuffer.Length)

myStream.Close()

‘Change the extension of the file creating a FileStream object.

Dim myCompressedFile As FileStream = File.Create(Server.MapPath(Path.ChangeExtension(strName, “rar”)))

‘GZip object that compress the file

Dim myStreamZip As New System.IO.Compression.GZipStream(myCompressedFile, CompressionMode.Compress)

‘Write Back

myStreamZip.Write(myBuffer, 0, myBuffer.Length)

myStreamZip.Close()

Me.lblResult.Text = “””” + strName + “”” was uploaded successfully and compressed.”

Catch ex As Exception

Me.lblResult.Text = “An Error Occured While Uploading File.”

End Try

End Sub

End Class


Bookmark and Share

SingleTon Object

Introduction

Sometime we need a class that has to be instantiated only once. That means we cannot have more than one instance for a class. Here singleton comes into picture. Singleton object is not a new thing come from oops concept. Let us read how easy it is.

Implementation

Typically every class is instantiated using constructor. Suppose if you make the access modifier of constructor to private, what happens u cannot access the constructor outside the class. That means u cannot instantiate your class. Then now you may have a doubt that how can we access the methods in that class without an instance. So for that you are creating one static method inside the class, I think now you got an idea. Yes, how can we access static method in a class? Directly using (classname.Methodname).
In the same way we are using our static method in our class. That static method is of class type it belongs. That means we are returning class object from static method. In this way we are restricting our class to single instanced class.

Example

This gives some clarification.public class MySingletonClass
{
//////// declarations

private string _name;
private string _company;
private static MySingletonClass singletonobject = new MySingletonClass();

//////// here some properties
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}

public string Company
{
get
{
return _company;
}
set
{
_company = value;
}
}

///// here private constructor

private MySingleTonClass()
{
_name = “Phani”;
_company = “KST”;
}

public static MySingletonClass GetSingletonObject()
{
return singletonobject;

}

}

that’s all now u create singleton object in your application like this

MySingletonObject singleton = MySingletonObject.GetSingletonObject();
singleton.Name = “Phanindra”;
singleton.Company = “KST”;

 

 

 

 

Summary

This article describes what singleton object is and how can we make it ? and these
Singleton objects are mainly used as session objects. Just directly assign this reference
To System.Web.HttpContext.Current.Session[“SingletonSession”] = singleton;

Que : Which of the following is a Singleton object

             DataReader,SqlConnetion,SqlDataAdapter,DataSet

Ans :  DataReader

An instance of the DataReader cannot be created like DataReader dr=new DataReader() but only like DataReader dr=cmd.ExecuteReader() which returns an open datareader , this is to restrict only one instance of the dr per execution as the datareader has the behavior of exclusively locking up db connections until it reads all the records

 Courtesy: The Seo Guru, A Software Development Company, Best OOPS Blog Site, Link Submission, Thanks to Shopping  Site for Link Exchanging


Bookmark and Share

SingleTon Object

Introduction

Sometime we need a class that has to be instantiated only once. That means we cannot have more than one instance for a class. Here singleton comes into picture. Singleton object is not a new thing come from oops concept. Let us read how easy it is.

Implementation

Typically every class is instantiated using constructor. Suppose if you make the access modifier of constructor to private, what happens u cannot access the constructor outside the class. That means u cannot instantiate your class. Then now you may have a doubt that how can we access the methods in that class without an instance. So for that you are creating one static method inside the class, I think now you got an idea. Yes, how can we access static method in a class? Directly using (classname.Methodname).
In the same way we are using our static method in our class. That static method is of class type it belongs. That means we are returning class object from static method. In this way we are restricting our class to single instanced class.

Example

This gives some clarification.public class MySingletonClass
{
//////// declarations

private string _name;
private string _company;
private static MySingletonClass singletonobject = new MySingletonClass();

//////// here some properties
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}

public string Company
{
get
{
return _company;
}
set
{
_company = value;
}
}

///// here private constructor

private MySingleTonClass()
{
_name = “Phani”;
_company = “KST”;
}

public static MySingletonClass GetSingletonObject()
{
return singletonobject;

}

}

that’s all now u create singleton object in your application like this

MySingletonObject singleton = MySingletonObject.GetSingletonObject();
singleton.Name = “Phanindra”;
singleton.Company = “KST”;

 

 

 

 

Summary

This article describes what singleton object is and how can we make it ? and these
Singleton objects are mainly used as session objects. Just directly assign this reference
To System.Web.HttpContext.Current.Session[“SingletonSession”] = singleton;

Que : Which of the following is a Singleton object

             DataReader,SqlConnetion,SqlDataAdapter,DataSet

Ans :  DataReader

An instance of the DataReader cannot be created like DataReader dr=new DataReader() but only like DataReader dr=cmd.ExecuteReader() which returns an open datareader , this is to restrict only one instance of the dr per execution as the datareader has the behavior of exclusively locking up db connections until it reads all the records

 Courtesy: The Seo Guru, A Software Development Company, Best OOPS Blog Site, Link Submission, Thanks to Shopping  Site for Link Exchanging


Bookmark and Share

OOPS Concepts and .NET Part 2 Inheritance, Abstraction, Polymorphism

Summary

The following article is the second of a three-part article series that presents definitions and samples for different Object-Oriented Programming (OOP) concepts and its implementation in .NET. The first part examined the concepts of classes, objects, and structures. This part examines the concepts of inheritance, abstraction, and polymorphism. The third and last part will examine the concepts of interface, multiple interface inheritance, collections, and overloading.

Introduction

In Part 1 of Object-Oriented Programming Concepts and .NET, I defined the concepts of class, object, and structure. In addition to defining the concepts, I explained real world samples and presented sample code in C# and VB.NET to create classes and structs. The first article also explains objects as independent building blocks.

In Part 2 of Object-Oriented Programming Concepts and .NET, I will explain the concepts of inheritance, abstraction, and polymorphism. I will also present a Unified Model Language (UML) class diagram to represent an object model that will help as a visual aid to explain some concepts. The purpose of this article is to explain a series of relationships between objects.

Inheritance

In the real world there are many objects that can be specialized. In OOP, a parent class can inherit its behavior and state to children classes. This concept was developed to manage generalization and specialization in OOP and is represented by a is-a relationship.

The following OO terms are commonly used names given to parent and child classes in OOP:

·       Superclass: Parent class.

·       Subclass: Child class.

·       Base class: Parent class.

·       Derived class: Child class

The most common real world sample to explain inheritance is the geometric shapes object model. Squares, circles, triangles, rectangles, pentagons, hexagons, and octagons are geometric shapes. The following figure shows a sample set of geometric figures:

Figure 1. Geometric shapes.

The concept of generalization in OOP means that an object encapsulates common state an behavior for a category of objects. The general object in this sample is the geometric shape. Most geometric shapes have area, perimeter, and color. The concept of specialization in OOP means that an object can inherit the common state and behavior of a generic object; however, each object needs to define its own special and particular state an behavior. In Figure 1, each shape has its own color. Each shape has also particular formulas to calculate its area and perimeter.

Inheritance makes code elegant and less repetitive. If we know that all shapes have color, should we program a color attribute for each shape? The answer is no! Would it be a better idea to create a shape class that has a color attribute and to make all the specialized shapes to inherit the color attribute? The answer is yes!

An object model for this sample could have a shape parent class and a derived class for each specific shape. The following UML class diagram shows the set of classes needed to model the geometric shapes sample. Observe the field, properties, and methods for each class:

 

Figure 2. The Shape class is the parent class. Square, Rectangle, and Circle are derived classes that inherit from Shape. The triangle-connector in the diagram represents an is-a relationship.

The .NET framework has many base classes. Everything is derived from System.Object. You can create almost anything you imagine using the built-in functionality provided in the .NET Framework Class Library.

To create a derived class in C#, the class declaration should be done as:

class child: parent 

To create a derived class in VB.NET, the class declaration should be done as:

Class child
Inherits
parent
End
Class

Multiple inheritance

Multiple inheritance is the possibility that a child class can have multiple parents. Human beings have always two parents, so a child will have characteristics from both parents.

In OOP, multiple inheritance might become difficult to handle because it allows ambiguity for the compiler. There are programming languages such as C++ that allow multiple inheritance; however, other programming languages such as Java and the .NET Framework languages do not allow multiple inheritance. Multiple inheritance can be emulated in .NET using Multiple Interface Inheritance, which I will explain in Part 3 of this series.

Sealed class

A sealed class is a class that does not allow inheritance. Some object model designs need to allow the creation of new instances but not inheritance, if this is the case, the class should be declared as sealed.

To create a sealed class in C#, the class declaration should be done as:

sealed class Shape

To create a sealed class in VB.NET, the class declaration should be done as:

NonInheritable Class Shape

Abstraction

Abstraction is “the process of identifying common patterns that have systematic variations; an abstraction represents the common pattern and provides a means for specifying which variation to use” (Richard Gabriel).

An abstract class is a parent class that allows inheritance but can never be instantiated. Abstract classes contain one or more abstract methods that do not have implementation. Abstract classes allow specialization of inherited classes.

Figure 2 shows a Shape class, which is an abstract class. In the real world, you never calculate the area or perimeter of a generic shape, you must know what kind of geometric shape you have because each shape (eg. square, circle, rectangle, etc.) has its own area and perimeter formulas. The parent class shape forces all derived classes to define the behavior for CalculateArea() and CalculatePerimeter(). Another great example is a bank account. People own savings accounts, checking accounts, credit accounts, investment accounts, but not generic bank accounts. In this case, a bank account can be an abstract class and all the other specialized bank accounts inherit from bank account.

To create an abstract class in C#, the class declaration should be done as:

abstract class Shape

To create an abstract class in VB.NET, the class declaration should be done as:

MustInherit Class Shape

To following code shows a sample implementation of an abstract class:

/// C#
using System;
namespace
DotNetTreats.OOSE.OOPSamples
{
public
abstract class Shape
{
private
float _area;
private
System.Drawing.Color _color;
private
float _perimeter;
public
float Area
{
get
{
return
_area;
}
set
{
_area = value;
}
}
public
System.Drawing.Color Color
{
get
{
return
_color;
}
set
{
_color = value;
}
}
public
float Perimeter
{
get
{
return
_perimeter;
}
set
{
_perimeter = value;
}
}
public
abstract void CalculateArea();
public
abstract void

CalculatePerimeter();
}
}
Listing 1. The Shape abstract class in C#.
 

 

Polymorphism

Polymorphism allows objects to be represented in multiple forms. Even though classes are derived or inherited from the same parent class, each derived class will have its own behavior. Polymorphism is a concept linked to inheritance and assures that derived classes have the same functions even though each derived class performs different operations.

Figure 2 shows a Rectangle, a Circle, and Square. All of them are shapes and as shapes their area and perimeter can be calculated; however, each shape calculates its area in a specialized way. Declaring a member as abstract allows polymorphism. The Shape class defines the CalculateArea() and CalculatePerimeter() methods as abstract, this allows each derived class to override the implementation of the parent’s methods.

To following sample code shows an implementation of a derived class (rectangle). The specific CalculateArea() and CalculatePerimeter() methods for the rectangle class illustrate polymorphism:

/// C#
using System;
namespace
DotNetTreats.OOSE.OOPSamples
{
class
Rectangle : Shape
{
private
float _height;
private
float _width;
public
rectangle(float height, float width)
{
_height = height;
_width = width;
}
public
float Height
{
get
{
return
_height;
}
set
{
_height = value;
}
}
public
float Width
{
get
{
return
_width;
}
set
{
_width = value;
}
}
public
override void CalculateArea()
{
this.Area = _height * _width;
}
public
override void

CalculatePerimeter()
{
this.Perimeter = (_height * 2) + (_width * 2);
}
}
}
Listing 2. Polymorphism represented in the Rectangle’s methods.
 

 

Virtual keyword

The virtual keyword allows polymorphism too. A virtual property or method has an implementation in the base class, and can be overriden in the derived classes.

To create a virtual member in C#, use the virtual keyword:

public virtual void Draw()

To create a virtual member in VB.NET, use the Overridable keyword:
Public Overridable Function Draw()
 

 

Override keyword

Overriding is the action of modifying or replacing the implementation of the parent class with a new one. Parent classes with virtual or abstract members allow derived classes to override them.

To override a member in C#, use the override keyword:

public override void CalculateArea()

To override a member in VB.NET, use the Overrides keyword:

Public Overrides Function CalculateArea()

Conclusion

Inheritance allows developers to manage a generalization and specialization relationship between objects. OOP concepts such as abstraction and polymorphism help to define better object models where object hierarchies are designed with reusability in mind. In this article, I examined the concept of inheritance, abstraction, and polymorphism. The third and last part of this series will examine the concepts of interface, multiple interface inheritance, collections, and overloading.

Courtesy: The Seo Guru, A Software Development Company, Best OOPS Blog Site, Link Submission, Thanks to Shopping  Site for Link Exchanging


Bookmark and Share

OOPS Concepts and .NET Part 2 Inheritance, Abstraction, Polymorphism

Summary

The following article is the second of a three-part article series that presents definitions and samples for different Object-Oriented Programming (OOP) concepts and its implementation in .NET. The first part examined the concepts of classes, objects, and structures. This part examines the concepts of inheritance, abstraction, and polymorphism. The third and last part will examine the concepts of interface, multiple interface inheritance, collections, and overloading.

Introduction

In Part 1 of Object-Oriented Programming Concepts and .NET, I defined the concepts of class, object, and structure. In addition to defining the concepts, I explained real world samples and presented sample code in C# and VB.NET to create classes and structs. The first article also explains objects as independent building blocks.

In Part 2 of Object-Oriented Programming Concepts and .NET, I will explain the concepts of inheritance, abstraction, and polymorphism. I will also present a Unified Model Language (UML) class diagram to represent an object model that will help as a visual aid to explain some concepts. The purpose of this article is to explain a series of relationships between objects.

Inheritance

In the real world there are many objects that can be specialized. In OOP, a parent class can inherit its behavior and state to children classes. This concept was developed to manage generalization and specialization in OOP and is represented by a is-a relationship.

The following OO terms are commonly used names given to parent and child classes in OOP:

·       Superclass: Parent class.

·       Subclass: Child class.

·       Base class: Parent class.

·       Derived class: Child class

The most common real world sample to explain inheritance is the geometric shapes object model. Squares, circles, triangles, rectangles, pentagons, hexagons, and octagons are geometric shapes. The following figure shows a sample set of geometric figures:

Figure 1. Geometric shapes.

The concept of generalization in OOP means that an object encapsulates common state an behavior for a category of objects. The general object in this sample is the geometric shape. Most geometric shapes have area, perimeter, and color. The concept of specialization in OOP means that an object can inherit the common state and behavior of a generic object; however, each object needs to define its own special and particular state an behavior. In Figure 1, each shape has its own color. Each shape has also particular formulas to calculate its area and perimeter.

Inheritance makes code elegant and less repetitive. If we know that all shapes have color, should we program a color attribute for each shape? The answer is no! Would it be a better idea to create a shape class that has a color attribute and to make all the specialized shapes to inherit the color attribute? The answer is yes!

An object model for this sample could have a shape parent class and a derived class for each specific shape. The following UML class diagram shows the set of classes needed to model the geometric shapes sample. Observe the field, properties, and methods for each class:

 

Figure 2. The Shape class is the parent class. Square, Rectangle, and Circle are derived classes that inherit from Shape. The triangle-connector in the diagram represents an is-a relationship.

The .NET framework has many base classes. Everything is derived from System.Object. You can create almost anything you imagine using the built-in functionality provided in the .NET Framework Class Library.

To create a derived class in C#, the class declaration should be done as:

class child: parent 

To create a derived class in VB.NET, the class declaration should be done as:

Class child
Inherits
parent
End
Class

Multiple inheritance

Multiple inheritance is the possibility that a child class can have multiple parents. Human beings have always two parents, so a child will have characteristics from both parents.

In OOP, multiple inheritance might become difficult to handle because it allows ambiguity for the compiler. There are programming languages such as C++ that allow multiple inheritance; however, other programming languages such as Java and the .NET Framework languages do not allow multiple inheritance. Multiple inheritance can be emulated in .NET using Multiple Interface Inheritance, which I will explain in Part 3 of this series.

Sealed class

A sealed class is a class that does not allow inheritance. Some object model designs need to allow the creation of new instances but not inheritance, if this is the case, the class should be declared as sealed.

To create a sealed class in C#, the class declaration should be done as:

sealed class Shape

To create a sealed class in VB.NET, the class declaration should be done as:

NonInheritable Class Shape

Abstraction

Abstraction is “the process of identifying common patterns that have systematic variations; an abstraction represents the common pattern and provides a means for specifying which variation to use” (Richard Gabriel).

An abstract class is a parent class that allows inheritance but can never be instantiated. Abstract classes contain one or more abstract methods that do not have implementation. Abstract classes allow specialization of inherited classes.

Figure 2 shows a Shape class, which is an abstract class. In the real world, you never calculate the area or perimeter of a generic shape, you must know what kind of geometric shape you have because each shape (eg. square, circle, rectangle, etc.) has its own area and perimeter formulas. The parent class shape forces all derived classes to define the behavior for CalculateArea() and CalculatePerimeter(). Another great example is a bank account. People own savings accounts, checking accounts, credit accounts, investment accounts, but not generic bank accounts. In this case, a bank account can be an abstract class and all the other specialized bank accounts inherit from bank account.

To create an abstract class in C#, the class declaration should be done as:

abstract class Shape

To create an abstract class in VB.NET, the class declaration should be done as:

MustInherit Class Shape

To following code shows a sample implementation of an abstract class:

/// C#
using System;
namespace
DotNetTreats.OOSE.OOPSamples
{
public
abstract class Shape
{
private
float _area;
private
System.Drawing.Color _color;
private
float _perimeter;
public
float Area
{
get
{
return
_area;
}
set
{
_area = value;
}
}
public
System.Drawing.Color Color
{
get
{
return
_color;
}
set
{
_color = value;
}
}
public
float Perimeter
{
get
{
return
_perimeter;
}
set
{
_perimeter = value;
}
}
public
abstract void CalculateArea();
public
abstract void

CalculatePerimeter();
}
}
Listing 1. The Shape abstract class in C#.
 

 

Polymorphism

Polymorphism allows objects to be represented in multiple forms. Even though classes are derived or inherited from the same parent class, each derived class will have its own behavior. Polymorphism is a concept linked to inheritance and assures that derived classes have the same functions even though each derived class performs different operations.

Figure 2 shows a Rectangle, a Circle, and Square. All of them are shapes and as shapes their area and perimeter can be calculated; however, each shape calculates its area in a specialized way. Declaring a member as abstract allows polymorphism. The Shape class defines the CalculateArea() and CalculatePerimeter() methods as abstract, this allows each derived class to override the implementation of the parent’s methods.

To following sample code shows an implementation of a derived class (rectangle). The specific CalculateArea() and CalculatePerimeter() methods for the rectangle class illustrate polymorphism:

/// C#
using System;
namespace
DotNetTreats.OOSE.OOPSamples
{
class
Rectangle : Shape
{
private
float _height;
private
float _width;
public
rectangle(float height, float width)
{
_height = height;
_width = width;
}
public
float Height
{
get
{
return
_height;
}
set
{
_height = value;
}
}
public
float Width
{
get
{
return
_width;
}
set
{
_width = value;
}
}
public
override void CalculateArea()
{
this.Area = _height * _width;
}
public
override void

CalculatePerimeter()
{
this.Perimeter = (_height * 2) + (_width * 2);
}
}
}
Listing 2. Polymorphism represented in the Rectangle’s methods.
 

 

Virtual keyword

The virtual keyword allows polymorphism too. A virtual property or method has an implementation in the base class, and can be overriden in the derived classes.

To create a virtual member in C#, use the virtual keyword:

public virtual void Draw()

To create a virtual member in VB.NET, use the Overridable keyword:
Public Overridable Function Draw()
 

 

Override keyword

Overriding is the action of modifying or replacing the implementation of the parent class with a new one. Parent classes with virtual or abstract members allow derived classes to override them.

To override a member in C#, use the override keyword:

public override void CalculateArea()

To override a member in VB.NET, use the Overrides keyword:

Public Overrides Function CalculateArea()

Conclusion

Inheritance allows developers to manage a generalization and specialization relationship between objects. OOP concepts such as abstraction and polymorphism help to define better object models where object hierarchies are designed with reusability in mind. In this article, I examined the concept of inheritance, abstraction, and polymorphism. The third and last part of this series will examine the concepts of interface, multiple interface inheritance, collections, and overloading.

Courtesy: The Seo Guru, A Software Development Company, Best OOPS Blog Site, Link Submission, Thanks to Shopping  Site for Link Exchanging


Bookmark and Share

Free SEO Tools You Can’t Live Without

Visit Zonix Software Solutions

Here are six important SEO Tools to get you started:

1. Backlink Anchor Text Analysis – This tool is especially useful, as we all know that anchor text (if you don’t, then take my word for it) plays a huge part in the weight given to a link to your site. By inputting your URL, you can check all of the backlinks pointing to your site and the anchor text used for each. Quality, relevant, keyword related anchor text is the best way to link to someone, so if you see people that are linking to you using the infamous “click here”, kindly shoot them an email and ask them to change it if they have time. It’s worth the trouble.

2. Free Keyword Suggestion Tool – Okay, so I covered this a little in my last post, but it’s definitley worth listing again. As you know, it’s an quick way to nail down some nice keywords, and get a general idea of the amount of search volume each one commands. Quick, easy, and fun.

3. Domain Stats Tool – Yeah, spying on your competitor is so much fun! This tool comes in handy if you just can’t seem to figure out why your enemies are ranking higher than you (other than the normal stuff). Input a URL, and it will tell you things like domain age, big directory listings, backlink count in the big 3 (Google, Yahoo, MSN). Nothing too detailed, but it may be useful information at one point or another.

4. Keyword Difficulty Check – This seo tool is just downright cool. In your quest for the ultimate keywords, wouldn’t it be nice to see how difficult it would be to rank for a particular keyword? Problem solved. This famous tool over at SEOChat will do just that. It will tell you how hard it’s going to be percentage wise to rank for whatever keyword you put in. For instance, the keyword “SEO” gets a score of 78.5%, compared to “Florida SEO Company” scores a 42.03%. I could actually do this for hours, so I better move on before I digress….

5. Google Vs. Yahoo Search Results – Talk about interesting. This tool lets you put in a keyword or keyphrase of your choice, and after it runs, it will present you with a graph showing where they rank on each site. Lines are drawn across the graph for matching domains. It’s very cool to see how each search engine ranks pages for certain keywords. For instance, I ran a query on the keyword “seo tips”, and I noticed that the 3rd result site in Google is ranked well over 40 in Yahoo. Not all of them are that far apart..some are actually really close. By the way, does anyone know the algorithms for each? I just need to borrow it real quick….

6. Term Extractor – This little handy tool will let you input a URL, and after analyzing, it will tell you what it thinks is a search engine targeted term. This is a VERY clever tool, which I recommend you run on your site periodically, that way if you’re trying to target “garden tools” and the term extractor tells you that it thinks “sea monkey poop” is more SE targeted, that you have some work to do, keyword density wise!


Bookmark and Share

Introduction to .NET Remoting – Part [1]

Click Here to visit our website

Welcome to the world of Distributed Application!

The article will give you introduction to the world of Distributed Application development and its respective technologies.

What is Remoting?

Remoting” is the process of programs interacting across certain boundaries. The boundaries are either different processes or different machines. In .NET Framework, Remoting can be called the foundation of distributed application.

Remoting implementation generally distinguishes between Remote Objects and Mobile Objects.

Remote Object” provides the facility to execute methods on remote servers. You can pass parameters as well as return values. The “Remote Object” will always “Stay” at server and only a reference to it will be passes around other machines / processes.

While “Mobile Objects” passes the boundary, they are serialized in to some general representation – XML – and then deserialized to the other boundary involved in the process. Both the processes – server and client – hold the copies of the same object. Method execution will always be carried out in local context boundary, and no message will travel back to the process from where the object is actually originated. We can say, there is no distinction between a server object and a client object.

Scenarios for .NET Remoting

I mean, why Remoting comes into picture?

At the beginning of Client/Server era, Remoting was mostly used to access Server Resources; as each database or file server has an implementation which allow code to be executed remotely.

Now-a-days, it’s quite feasible building a distributed application among various machines to improve performance, scalability and maintainability using Remoting.

  • Centralized Business Logic

One of key scenario for remoting implementation is the concentration of business logic on one or more central servers. This simplifies the maintainability and operability of a large-scale application. Because any changes in business logic do not entail you to roll out the application at all user’s end – you just have to update one single server only.

Thus, in this scenario; we need a technique which can be used to communicate in between two process / context boundaries that is the program or process running at user end and another one is running at business server.

  • Physical Separation of Layers

The security is the common concern in web-enabled business. So, general recommendation is against for directly connecting from web server to database server. Instead of that, we used to have one application server / business server as discussed above.

  • Accessing Other Platforms

You will commonly encounter a heterogeneous combination of different platforms, frameworks and programming languages. It is uncommon to find that a bunch of tools, programming languages have been used and implemented to develop an application for a mid-to-large scale enterprise.

Integrating these systems can be a daunting task. Remoting architecture is an absolute necessity in large scale enterprise application integration.

  • Third Party Access

Opening your system for third party access in a business-to-business environment is quite common now-a-days. Application like online Order-entry, which allows third party to place orders from one system to other, is one good example of an application utilizing remoting architecture. More application examples are – address verification system, online price comparison, distributed visitor guard house application etc.

Click Here to visit our website


Bookmark and Share