Cloning C# objects is one of those things that appears easy but is actually quite complicated with many "gotchas." This article describes the most common ways to clone a C# object.

Shallow vs. Deep Cloning

There are two types of object cloning: shallow and deep. A shallow clone copies the references but not the referenced objects. A deep clone copies the referenced objects as well.

Hence, a reference in the original object and the same reference in a shallow-cloned object both point to the same object. Whereas a deep-cloned object contains a copy of everything directly or indirectly referenced by the object. See wikipedia for a detailed explanation.

Object Clone

ICloneable Interface

The ICloneable interface contains a single Clone method, which is used to create a copy of the current object.

public interface ICloneable
{
object Clone();
}

The problem with ICloneable is that the Clone method does not explicitly specify whether it is performing a shallow or deep copy, so callers can never be sure. Hence, there is some discussion about making ICloneable obsolete in the .NET Framework. The MSDN documentation seems to hint that Clone should perform a deep copy, but it is never explicitly stated:

The ICloneable interface contains one member, Clone, which is intended to support cloning beyond that supplied by MemberWiseClone… The MemberwiseClone method creates a shallow copy…

Type-Safe Clone

Another disadvantage of ICloneable is that the Clone method returns an object, hence every Clone call requires a cast:

Person joe = new Person();
joe.Name = "Joe Smith";
Person joeClone = (Person)joe.Clone();

One way to avoid the cast is to provide your own type-safe Clone method. Note that you must still provide the ICloneable.Clone method to satisfy the ICloneable interface:

public class Person : ICloneable
{
public string Name;
object ICloneable.Clone()
{
return this.Clone();
}
public Person Clone()
{
return (Person)this.MemberwiseClone();
}
}

Clone Options

Following are some of the more common approaches to clone a C# object:

1. Clone Manually

One way to guarantee that an object will be cloned exactly how you want it is to manually clone every field in the object. The disadvantage to this method is it's tedious and error prone: if you add or change a field in the class, chances are you will forget to update the Clone method. Note that care must be taken to avoid an infinite loop when cloning referenced objects that may refer back to the original object. Here is a simple example that performs a deep copy:

public class Person : ICloneable
{
public string Name;
public Person Spouse;
public object Clone()
{
Person p = new Person();
p.Name = this.Name;
if (this.Spouse != null)
p.Spouse = (Person)this.Spouse.Clone();
return p;
}
}

2. Clone with MemberwiseClone

MemberwiseClone is a protected method in the Object class that creates a shallow copy by creating a new object, and then copying the nonstatic fields of the current object to the new object. For value-type fields, this performs a bit-by-bit copy. For reference-type fields, the reference is copied but the referred object is not; therefore, the original object and its clone refer to the same object. Note this works for all derived classes, and hence you only need to define the Clone method once in the base class. Here is a simple example:

public class Person : ICloneable
{
public string Name;
public Person Spouse;
public object Clone()
{
return this.MemberwiseClone();
}
}

3. Clone with Reflection

Cloning by Reflection uses Activator.CreateInstance to create a new object of the same type, then performs a shallow copy of each field using Reflection. The advantage of this method is it's automated and does not need to be adjusted when members are added or removed from the object. Also, it can be written to provide a deep copy. The disadvantage is it uses Reflection, which is slower and not allowed in partial trust environments. Sample code

4. Clone with Serialization

One of the easiest ways to clone an object is to serialize it and immediately deserialize it into a new object. Like the Reflection approach, the Serialization approach is automated and does not need to be adjusted when members are added or removed from the object. The disadvantage is that serialization can be slower than other methods including Reflection, and all cloned and referenced objects must be marked Serializable. Also, depending on what type of serialization you use (XML, Soap, Binary), private members may not be cloned as desired. Sample code here and here and here.

5. Clone with IL

A fringe solution is to use IL (Intermediate Language) to clone objects. This approach creates a DynamicMethod, gets the ILGenerator, emits code in the method, compiles it to a delegate, and executes the delegate. The delegate is cached so that the IL is generated only the first time and not for each subsequent cloning. Although this approach is faster than Reflection, it is difficult to understand and maintain. Sample code

6. Clone with Extension Methods

Havard Stranden created a custom cloning framework using extension methods. The framework creates a deep copy of an object and all referenced objects, no matter how complex the object graph is. The disadvantage is this is a custom framework with no source code (Update: source code now included, see comment below), and it cannot copy objects created from private classes without parameterless constructors. Another problem, which is common to all automated deep copy methods, is that deep copying often requires intelligence to handle special cases (such as unmanaged resources) that cannot be easily automated.

16

View comments

  1. Simply Great stuff, Short and Precise

    ReplyDelete
  2. Great article, thanks. BTW, I think your "Clone Manually" example will lead to an infinite recursion, if P1 and P2 are spouses: P1.clone -> P2.clone -> P1.clone -> ...

    ReplyDelete
  3. Thanks for this overview. Great introduction into this subject. A time saver.

    ReplyDelete
  4. Very nice article. I have always needed this comprehensive introduction to cloning.

    ReplyDelete
  5. Thank you.Perfect article.

    ReplyDelete
  6. I just checked: C# does offer the correct solution for the type safety problem: http://msdn.microsoft.com/en-us/library/dd233060(v=vs.110).aspx

    Also, the iCloneable interface should not define if the implementers are cloned shallow or not. That is an implementation detail which should be encapsulated. Generally it's not even that clear cut: Some attributes are sensible to be cloned shallowly and others deeply, it's the class's author's decision which to apply where.

    ReplyDelete
  7. Very nice article - great and yet short introduction.

    I add two more links for well working cloning codes:
    1. Cloning by Reflection
    2. Cloning by Expression Trees

    The second link has beside the code also performance comparison of cloning by Serialization, Reflection and Expression Trees.

    ReplyDelete
  8. Your style is unique in comparison to other folks I have read stuff from.
    Many thanks for posting when you have the opportunity, Guess I will just bookmark this blog.wondershare filmora crack

    ReplyDelete
  9. Camtasia!
    PC Full Crack!
    I am very thankful for the effort put on by you, to help us, Thank you so much for the post it is very helpful, keep posting such type of Article.

    ReplyDelete
  10. Need for Speed: Undercover For Pc Download Game
    Thepcgameshere.com
    Need for Speed: Undercover For Pc Download is a supercar speediest car racing game. This game has an adventure for users who like to play it.

    ReplyDelete
  11. Ashes Cricket Game
    Ashes Cricket Game Download is the powerfully authorized computer game. Therefore, It cricket’s most prominent conflict.

    ReplyDelete
  12. MediaMonkey Gold
    https://windowsactivation.net/
    MediaMonkeyGold Serial Key is an excellent all-round program for recording and organising music and supports all popular audio formats.

    ReplyDelete
  13. In 2021, the world777 online gaming audience in India grew 28 per cent to reach Rs 101 billion or crore ( roughlyUS$1.3 billion), according to a report published in March 2022 by EY, a global professional services company, and the Federation of Indian Chambers of Commerce & Industry (FICCI).

    ReplyDelete

  1. DECLARE
    @imgString varchar(80),
    @insertString varchar(3000),
    @imgNumber int

    SET @imgNumber = 1

    WHILE (@imgNumber <= 100)
    BEGIN

    SET @imgString = 'D:\MPPICTURES\PP' + CONVERT(nvarchar,@imgNumber) + '.jpg'

    SET @insertString= N'update tblEmp
    set PICTURES = (SELECT * FROM OPENROWSET(BULK N''' + @imgString + ''', SINGLE_BLOB) as tempImg)
    WHERE EmpID = ''' + CONVERT(nvarchar,@imgNumber) + ''''
    EXEC(@insertString)
    SET @imgNumber = @imgNumber + 1

    END

    GO
    0

    Add a comment


  2. 0

    Add a comment

  3. Recovering SQL Server Database From Suspect Mode

    Follow below steps to recover database from suspect mode:
    1. ALTER DATABASE [database_name] SET EMERGENCY 
    2. DBCC checkdb('database_name') 
    3. ALTER DATABASE [database_name] SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
    4. DBCC CheckDB ('database_name', REPAIR_ALLOW_DATA_LOSS)
    5. ALTER DATABASE [database_name]  SET MULTI_USER

    If it does not work for you, then go for third party tool or restore database from available backups.
    0

    Add a comment


  4. Click Here For Free Online E-Books
    0

    Add a comment

  5. What Is LINQ to SQL?

    LINQ to SQL is an O/RM (object relational mapping) implementation that ships in the .NET Framework "Orcas" release, and which allows you to model a relational database using .NET classes. You can then query the database using LINQ, as well as update/insert/delete data from it.

    LINQ to SQL fully supports transactions, views, and stored procedures. It also provides an easy way to integrate data validation and business logic rules into your data model.

    Modeling Databases Using LINQ to SQL:

    Visual Studio "Orcas" ships with a LINQ to SQL designer that provides an easy way to model and visualize a database as a LINQ to SQL object model. My next blog post will cover in more depth how to use this designer (you can also watch this video I made in January to see me build a LINQ to SQL model from scratch using it).

    Using the LINQ to SQL designer I can easily create a representation of the sample "Northwind" database like below:

    My LINQ to SQL design-surface above defines four entity classes: Product, Category, Order and OrderDetail. The properties of each class map to the columns of a corresponding table in the database. Each instance of a class entity represents a row within the database table.

    The arrows between the four entity classes above represent associations/relationships between the different entities. These are typically modeled using primary-key/foreign-key relationships in the database. The direction of the arrows on the design-surface indicate whether the association is a one-to-one or one-to-many relationship. Strongly-typed properties will be added to the entity classes based on this. For example, the Category class above has a one-to-many relationship with the Product class. This means it will have a "Categories" property which is a collection of Product objects within that category. The Product class then has a "Category" property that points to a Category class instance that represents the Category to which the Product belongs.

    The right-hand method pane within the LINQ to SQL design surface above contains a list of stored procedures that interact with our database model. In the sample above I added a single "GetProductsByCategory" SPROC. It takes a categoryID as an input argument, and returns a sequence of Product entities as a result. We'll look at how to call this SPROC in a code sample below.

    Understanding the DataContext Class

    When you press the "save" button within the LINQ to SQL designer surface, Visual Studio will persist out .NET classes that represent the entities and database relationships that we modeled. For each LINQ to SQL designer file added to our solution, a custom DataContext class will also be generated. This DataContext class is the main conduit by which we'll query entities from the database as well as apply changes. The DataContext class created will have properties that represent each Table we modeled within the database, as well as methods for each Stored Procedure we added.

    For example, below is the NorthwindDataContext class that is persisted based on the model we designed above:

    LINQ to SQL Code Examples

    Once we've modeled our database using the LINQ to SQL designer, we can then easily write code to work against it. Below are a few code examples that show off common data tasks:

    1) Query Products From the Database

    The code below uses LINQ query syntax to retrieve an IEnumerable sequence of Product objects. Note how the code is querying across the Product/Category relationship to only retrieve those products in the "Beverages" category:

    C#:

    VB:

    2) Update a Product in the Database

    The code below demonstrates how to retrieve a single product from the database, update its price, and then save the changes back to the database:

    C#:

    VB:

    Note: VB in "Orcas" Beta1 doesn't support Lambdas yet. It will, though, in Beta2 - at which point the above query can be rewritten to be more concise.

    3) Insert a New Category and Two New Products into the Database

    The code below demonstrates how to create a new category, and then create two new products and associate them with the category. All three are then saved into the database.

    Note below how I don't need to manually manage the primary key/foreign key relationships. Instead, just by adding the Product objects into the category's "Products" collection, and then by adding the Category object into the DataContext's "Categories" collection, LINQ to SQL will know to automatically persist the appropriate PK/FK relationships for me.

    C#

    VB:

    4) Delete Products from the Database

    The code below demonstrates how to delete all Toy products from the database:

    C#:

    VB:

    5) Call a Stored Procedure

    The code below demonstrates how to retrieve Product entities not using LINQ query syntax, but rather by calling the "GetProductsByCategory" stored procedure we added to our data model above. Note that once I retrieve the Product results, I can update/delete them and then call db.SubmitChanges() to persist the modifications back to the database.

    C#:

    VB:

    6) Retrieve Products with Server Side Paging

    The code below demonstrates how to implement efficient server-side database paging as part of a LINQ query. By using the Skip() and Take() operators below, we'll only return 10 rows from the database - starting with row 200.

    C#:

    VB:

    Summary

    LINQ to SQL provides a nice, clean way to model the data layer of your application. Once you've defined your data model you can easily and efficiently perform queries, inserts, updates and deletes against it.

    1

    View comments

  6. monthReceipts.Text = String.Format("{0:£#,##0.00}", Convert.ToDecimal(m_accin));

    m_accin = Parameter Name
    0

    Add a comment

  7. When Internet Explorer 8 is installed, built-in Java Script debugger ships along. Since this is an in-proc debugger one need not launch a separate app.

    image

    It has all the familiar Visual Studio 2008 Features debugger like call stacks, watches, locals and immediate window.

    image

    To get to the debugger just press SHIFT+F12, or click the developer tools icon in the command bar.
    After launching the Developer Tools, switch to the script tab.


    1

    View comments

  8. What is Multi-Targeting?

    With the past few releases of Visual Studio, each Visual Studio release only supported a specific version of the .NET Framework. For example, VS 2002 only worked with .NET 1.0, VS 2003 only worked with .NET 1.1, and VS 2005 only worked with .NET 2.0.

    One of the big changes we are making starting with the VS 2008 release is to support what we call "Multi-Targeting" - which means that Visual Studio will now support targeting multiple versions of the .NET Framework, and developers will be able to start taking advantage of the new features Visual Studio provides without having to always upgrade their existing projects and deployed applications to use a new version of the .NET Framework library.

    Now when you open an existing project or create a new one with VS 2008, you can pick which version of the .NET Framework to work with - and the IDE will update its compilers and feature-set to match this. Among other things, this means that features, controls, projects, item-templates, and assembly references that don't work with that version of the framework will be hidden, and when you build your application you'll be able to take the compiled output and copy it onto a machine that only has an older version of the .NET Framework installed, and you'll know that the application will work.

    Creating a New Project in VS 2008 that targets .NET 2.0

    To see an example of multi-targeting in action on a recent build of VS 2008 Beta 2, we can select File->New Project to create a new application.

    Notice below how in the top-right of the new project dialog there is now a dropdown that allows us to indicate which versions of the .NET Framework we want to target when we create the new project. If I keep it selected on .NET Framework 3.5, I'll see a bunch of new project templates listed that weren't in previous versions of VS (including support for WPF client applications and WCF web service projects):


    If I change the dropdown to target .NET 2.0 instead, it will automatically filter the project list to only show those project templates supported on machines with the .NET 2.0 framework installed:



    If I create a new ASP.NET Web Application with the .NET 2.0 dropdown setting selected, it will create a new ASP.NET project whose compilation settings, assembly references, and web.config settings are configured to work with existing ASP.NET 2.0 servers:



    When you go to the control Toolbox, you'll see that only those controls that work on ASP.NET 2.0 are listed:




    And if you choose Add->Reference and bring up the assembly reference picker dialog, you'll see that those .NET class assemblies that aren't supported on .NET 2.0 are grayed out and can't be added to the project (notice how the "ok" button is not active below when I have a .NET 3.0 or .NET 3.5 assembly selected):


    So why use VS 2008 if you aren't using the new .NET 3.5 features?

    You might be wondering: "so what value do I get when using VS 2008 to work on a ASP.NET 2.0 project versus just using my VS 2005 today?" Well, the good news is that you get a ton of tool-specific value with VS 2008 that you'll be able to take advantage of immediately with your existing projects without having to upgrade your framework/ASP.NET version. A few big tool features in the web development space I think you'll really like include:

    1. JavaScript intellisense
    2. Much richer JavaScript debugging
    3. Nested ASP.NET master page support at design-time
    4. Rich CSS editing and layout support within the WYSIWYG designer
    5. Split-view designer support for having both source and design views open on a page at the same time
    6. A much faster ASP.NET page designer - with dramatic perf improvements in view-switches between source/design mode
    7. Automated .SQL script generation and hosting deployment support for databases on remote servers

    You'll be able to use all of the above features with any version of the .NET Framework - without having to upgrade your project to necessarily target newer framework versions. I'll be blogging about these features (as well as the great new framework features) over the next few weeks.

    So how can I upgrade an existing project to .NET 3.5 later?

    If at a later point you want to upgrade your project/site to target the NET 3.0 or NET 3.5 version of the framework libraries, you can right-click on the project in the solution explorer and pull up its properties page:




    You can change the "Target Framework" dropdown to select the version of the framework you want the project to target. Doing this will cause VS to automatically update compiler settings and references for the project to use the correct framework version. For example, it will by default add some of the new LINQ assemblies to your project, as well as add the new System.Web.Extensions assembly that ships in .NET 3.5 which delivers new ASP.NET controls/runtime features and provides built-in ASP.NET AJAX support (this means that you no longer need to download the separate ASP.NET AJAX 1.0 install - it is now just built-in with the .NET 3.5 setup):


    Once you change your project's target version you'll also see new .NET 3.5 project item templates show up in your add->new items dialog, you'll be able to reference assemblies built against .NET 3.5, as well as see .NET 3.5 specific controls show up in your toolbox.

    For example, below you can now see the new control (which is an awesome new control that provides the ability to do data reporting, editing, insert, delete and paging scenarios - with 100% control over the markup generated and no inline styles or other html elements), as well as the new control (which enables you to easily bind and work against LINQ to SQL data models), and control show up under the "Data" section of our toolbox:




    Note that in addition to changing your framework version "up" in your project properties dialog, you can also optionally take a project that is currently building against .NET 3.0 or 3.5 and change it "down" (for example: move it from .NET 3.5 to 2.0). This will automatically remove the newer assembly references from your project, update your web.config file, and allow you to compile against the older framework (note: if you have code in the project that was written against the new APIs, obviously you'll need to change it).

    What about .NET 1.0 and 1.1?

    Unfortunately the VS 2008 multi-targeting support only works with .NET 2.0, .NET 3.0 and .NET 3.5 - and not against older versions of the framework. The reason for this is that there were significant CLR engine changes between .NET 1.x and 2.x that make debugging very difficult to support. In the end the costing of the work to support that was so large and impacted so many parts of Visual Studio that we weren't able to add 1.1 support in this release.

    VS 2008 does run side-by-side, though, with VS 2005, VS 2003, and VS 2002. So it is definitely possible to continue targeting .NET 1.1 projects using VS 2003 on the same machine as VS 2008.



    0

    Add a comment

  9. 1. LINQ Support

    LINQ essentially is the composition of many standard query operators that allow you to work with data in a more intuitive way regardless.



    The benefits of using LINQ are significant – Compile time checking C# language queries, and the ability to debug step by step through queries.

    2. Expression Blend Support

    Expression blend is XAML generator tool for silverlight applications. You can install Expression blend as an embedded plug-in to Visual Studio 2008. By this you can get extensive web designer and JavaScript tool.

    3. Windows Presentation Foundation

    WPF provides you an extensive graphic functionality you never seen these before. Visual Studio 2008 contains plenty of WPF Windows Presentation Foundation Library templates. By this a visual developer who is new to .NET, C# and VB.NET can easily develop the 2D and 3D graphic applications.

    Visual Studio 2008 provides free game development library kits for games developers. currently this game development kits are available for C++ and also 2D/3D Dark Matter one image and sounds sets.

    4. VS 2008 Multi-Targeting Support

    Earlier you were not able to working with .NET 1.1 applications directly in visual studio 2005. Now in Visual studio 2008 you are able to create, run, debug the .NET 2.0, .NET 3.0 and .NET 3.5 applications. You can also deploy .NET 2.0 applications in the machines which contains only .NET 2.0 not .NET 3.x.

    5. AJAX support for ASP.NET



    Previously developer has to install AJAX control library separately that does not come from VS, but now if you install Visual Studio 2008, you can built-in AJAX control library. This Ajax Library contains plenty of rich AJAX controls like Menu, TreeView, webparts and also these components support JSON and VS 2008 contains in built ASP.NET AJAX Control Extenders.

    6. JavaScript Debugging Support

    Since starting of web development all the developers got frustration with solving javascript errors. Debugging the error in javascript is very difficult. Now Visual Studio 2008 makes it is simpler with javascript debugging. You can set break points and run the javaScript step by step and you can watch the local variables when you were debugging the javascript and solution explorer provides javascript document navigation support.

    7. Nested Master Page Support

    Already Visual Studio 2005 supports nested master pages concept with .NET 2.0, but the problem with this Visual Studio 2005 that pages based on nested masters can't be edited using WYSIWYG web designer. But now in VS 2008 you can even edit the nested master pages.

    8. LINQ Intellisense and Javascript Intellisense support for silverlight applications



    Most happy part for .NET developers is Visual Studio 2008 contains intellisense support for javascript. Javascript Intellisense makes developers life easy when writing client side validation, AJAX applications and also when writing Silverlight applications
    Intellisense Support: When we are writing the LINQ Query VS provides LINQ query syntax as tool tips.

    9. Organize Imports or Usings

    We have Organize Imports feature already in Eclipse. SInce many days I have been waiting for this feature even in VS. Now VS contains Organize Imports feature which removes unnecessary namespaces which you have imported. You can select all the namespaces and right click on it, then you can get context menu with Organize imports options like "Remove Unused Usings", "Sort Usings", "Remove and Sort". Refactoring support for new .NET 3.x features like Anonymous types, Extension Methods, Lambda Expressions.

    10. Intellisense Filtering

    Earlier in VS 2005 when we were typing with intellisense box all the items were being displayed. For example If we type the letter 'K' then intellisense takes you to the items starts with 'K' but also all other items will be presented in intellisense box. Now in VS 2008 if you press 'K' only the items starts with 'K' will be filtered and displayed.

    11. Intellisense Box display position



    Earlier in some cases when you were typing the an object name and pressing . (period) then intellisense was being displayed in the position of the object which you have typed. Here the code which we type will go back to the dropdown, in this case sometimes programmer may disturb to what he was typing. Now in VS 2008 If you hold the Ctrl key while the intellisense is dropping down then intellisense box will become semi-transparent mode.

    12. Visual Studio 2008 Split View



    VS 2005 has a feature show both design and source code in single window. but both the windows tiles horizontally. In VS 2008 we can configure this split view feature to vertically, this allows developers to use maximum screen on laptops and wide-screen monitors.

    Here one of the good feature is if you select any HTML or ASP markup text in source window automatically corresponding item will be selected in design window.

    13. HTML JavaScript warnings, not as errors

    VS 2005 mixes HTML errors and C# and VB.NET errors and shows in one window. Now VS 2008 separates this and shows javascript and HTML errors as warnings. But this is configurable feature.

    14. Debugging .NET Framework Library Source Code

    Now in VS 2008 you can debug the source code of .NET Framework Library methods. Lets say If you want to debug the DataBind() method of DataGrid control you can place a debugging point over there and continue with debug the source code of DataBind() method.

    15. In built Silverlight Library



    Earlier we used to install silverlight SDK separately, Now in VS 2008 it is inbuilt, with this you can create, debug and deploy the silverlight applications.

    16. Visual Studio LINQ Designer



    Already you know in VS 2005 we have inbuilt SQL Server IDE feature. by this you no need to use any other tools like SQL Server Query Analyzer and SQL Server Enterprise Manger. You have directly database explorer by this you can create connections to your database and you can view the tables and stored procedures in VS IDE itself. But now in VS 2008 it has View Designer window capability with LINQ-to-SQL.

    17. Inbuilt C++ SDK

    Earlier It was so difficult to download and configure the C++ SDK Libraries and tools for developing windows based applications. Now it is inbuilt with VS 2008 and configurable

    18. Multilingual User Interface Architecture - MUI





    MUI is an architecture contains packages from Microsoft Windows and Microsoft Office libraries. This supports the user to change the text language display as he wish.
    Visual Studio is now in English, Spanish, French, German, Italian, Chinese Simplified, Chinese Traditional, Japanese, and Korean. Over the next couple of months. Microsoft is reengineering the MUI which supports nine local languages then you can even view Visual studio in other 9 local languages.

    19. Microsoft Popfly Support



    Microsoft Popfly explorer is an add-on to VS 2008, by this directly you can deploy or hosting the Silverlight applications and Marshup objects

    20. Free Tools and Resources

    People may feel that I am a promoter to Visual Studio 2008 as a salesman, but we get plenty of free resources and free tools with Visual Studio 2008.
    Visual Studio 2008 Trial
    101 LINQ Samples
    Free .NET 3.5 control libraries with free sample programs,
    You can get plenty of free video training tutorials from Microsoft BDLC - Beginner Developer Learning Center,
    C++ games development library,
    Microsoft has provided lot of e-Books,
    P2P library and
    Microsoft is providing Coding4Fun sample program kit.
    Visual Studio Registration Discounts: If you register the Visual Studio you get Free Control Libraries, Books, Images, and Discounts.
    Download Visual Studio 2008 free trial

    21. We can use for Commercial

    Earlier you were spending lot of money to host your .NET applications for commercial use. Now you no need to worry Now Microsoft is providing you to host your application free on Popfly for web pages and also visual studio express projects.
    0

    Add a comment

  10. Microsoft recently released a cool new ASP.NET server control - - that can be used for free with ASP.NET 3.5 to enable rich browser-based charting scenarios:
    Download the free Microsoft Chart Controls
    Download the VS 2008 Tool Support for the Chart Controls
    Download the Microsoft Chart Controls Samples
    Download the Microsoft Chart Controls Documentation
    Visit the Microsoft Chart Control Forum
    Once installed the control shows up under the "Data" tab on the Toolbox, and can be easily declared on any ASP.NET page as a standard server control.
    1

    View comments

Subscribe
Subscribe
Favorite Links
Blog Archive
About Me
Loading
Dynamic Views theme. Powered by Blogger. Report Abuse.