C# 4.0 .NET becomes dynamic

This post is about the session called C# 4.0 / The Future of C# given by Krishnan Subramanian.

csharp4-dlr

First off let me start with a quick summary of main new feauture for the different versions of the C# that are released.

  • C# 1.0, Managed code
  • C# 2.0, Generics
  • C# 3.0, Language Integrated Query, short LINQ
  • C# 4.0, Dynamic programming

Some off the innovation for C# 4.0 are:

Dynamic Language Runtime
The new version of C# has a new type of object declaration, called dynamic. This looks a bit the var keyword. With the var keyword the compiler replaced the var with the object type on compile time, intellisense and code completion still was available in Visual Studio. With the new dynamic keyword the compiler doesn’t replace this and even more important the compiler can’t check for syntax error on a dynamic object. Intellisense and code complition are also not available for objects defined with dynamic.

Dynamic objects are losely typed instead of strongly.

After reading this you might think whats the use of this new DLR, in the following sample I’ll try to explain this. We have a simple C# class called Calculator, and use it like below.

Calculator calc = GetCalculator();
int sum = calc.Add(10, 20);

Now suppose the calculator class is not strongly typed, the code would like something like the following

object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });
int sum = Convert.ToInt32(res);

With the new dynamic keyword in C# 4.0 it would simply be

dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);

Optional Named Parameters
To show you the what this means take a look at the examples below.

In previous version of C# method overloads would be used.

public void Add(string lineOfText);
public void Add(string lineOfText, bool isError);
public void Add(string lineOfText, int repeat);
public void Add(string lineOfText, int repeat, bool isError);

With the new C# 4.0, the method declaration would like this

public void Add(string lineOfText, int repeat = 1, bool isError = false);

As you can see in the sample above, it’s now possible to specify default values for a method parameter. Some samples of how to use the Add method are:

Add("This is the line", repeat : 5);
Add(isError : true, lineOfText : "Another line of text");

For people using JavaScript this might look very familiar.

Another cewl new thing I saw at the demo, was the ability to interpret and compile a string of C# code at runtime. This functionality offers some great new possibilities. Again for the Javascript people reading this it’s like the eval function.

ADO.NET Dataservices

ADO.NET Dataservices is a new way to open your data to the web. It’s especially usefull in combination with a Rich Internet Client Application, such as a silverlight application or an AJAX application.

Dataservices is an implementation of WCF but has some restrictions to it.

  • Dataservices makes use of the ATOM or the JSON format to transport the data, no other format is supported.
  • The data is transported over the HTTP or HTTPS protocol and no other protocol is supported.
  • Agarding to authentication you can´t use of the WCF authentication model. You are restricted to the standard authentication model ASP.NET offers you, Windows Authentication and Forms authentication.
  • Dataservices has a REST based interface implementation, witch means a request to the service can only be done using REST.

Getting started with Dataservices.

To get started with Dataservices you first need to define a datasource. This datasource needs to implement IQueryable<T> for the Dataservices to use it. Two commonly used framework that implement this interface are LINQ2SQL and the Entity Framework. For use with Dataservices it’s prefered to use the EntityFramework. The  IQueryable<T>makes it possible for Dataservices to query the data but to be able to update insert and delete data the datasource also has to implement the IUpdateAble<T> interface, wich is implemented by the Entity Framework and not by LINQ2SQL.

Now the datasource is created the Dataservice has to be created. There is a new template for adding the dataservice in Visual Studio 2008 SP1.

New Ado Service

New Ado Service

After this has been added the dataservice needs to be pointed to the datasource, below is a sample of that where a NorthwindDataService  is Created which is pointed to a NorthwindDataContext. In the example the security is also set to read for all entities in the InitializeService method. The security can be set per entity and per method.

public class NorthwindDataService : WebDataService<NorthwindDataContext> {
InitializeService(IWebDataServiceConfiguration config)
{
config.SetResourceContainerAccessRule
("*", ResourceContainerRights.AllRead);
}
}

Dataservices is queried by REST, this can be tested in a browser by calling the service. In the examples below it’s shown how to query the service. For this example the url of the service is ‘http://localhost:5555/Bookmarks.svc’.

The url below request for the model of the data.

‘http://localhost:5555/Bookmarks.svc$metadata’

Metadata

Metadata

To request a list of all the bookmarks put the url below in the browser. Here the ‘/Bookmarksrefers to the entityset Bookmarks.

‘http://localhost:5555/Bookmarks.svc/Bookmarks’

As is shown in the metadata the key of Bookmark is the Id property. Every entity needs a key property. To get just 1 bookmark with id 1 the following url can be used:
‘http://localhost:5555/Bookmarks.svc/Bookmarks(1)’

It’s also possible to get a list of entities based upon a filter. For example get all bookmarks with Tags Devdays. This is done by using keywords, which always begin with a ´$´, in the querystring.

‘http://localhost:5555/Bookmarks.svc/Bookmarks?$filter=Tags eq Devdays’

For Silverlight applications it’s possible to query dataservices using LINQ2Dataservices so you don’t have to create these url’s yourself buth you can just use LINQ to create queries.

Much more information about ADO.NET Dataservices can be found on MSDN.

Silverlight 3 Navigation

This post is about the session called What’s new in Silverlight 3 given by Mike Taulty.

A major disadvantage of RIA, Rich Internet Application, is that the state is of an application can not be recovered after the browser has been closed.

In Silverlight 3 there’s a solution for this problem. In SL3 you are now able to create a SL page. This in combination with the Frame and navigation Source make it possible to navigate through the same application based on the url.

The first part of the url is the path to the page on which the Silverlight page is located, for example http://localhost/SLapp.html.

After this the part of the url for the navigation within the application can be placed. This part must be preceded by a ‘#’, for example http://localhost/SLapp.html#SearchPage.xaml.

From webapplications we also now the querystring in the url for passing parameters to a site, this is also implemented in silverlight in the same way. The previously used url can then be formatted as followed http://localhost/SLapp.html#SearchPage.xaml?title=silverlight

More information about page navigation can be found at Mike Taulty’s blog.

Silverlight 3 Validation and Dataform control

This post is about the session calledWhat’s new in Silverlight 3 given by Mike Taulty.

Silverlight 3 has a new way for validating data. The validation rules can be set in a number of different ways:

  • Throwing an exception
  • Adding specific attributes to the classes properties

I specifically like the way the business rules can be applied to an object. Some samples of specifying the validation are shown below.

class Person
{
[Required(ErrorMessage = “The name of the person is required”)]
public string Name { get; set; }

[Range(18, 65, ErrorMessage = ”The person must be between 18 and 65 years old”)]
[DefaultValue(20)]
public int Age { get; set; }
}

More validation attributes are available at MSDN

The nice thing about the new version of Silverlight 3 is that the default input controls can handle these validation errors and show them to the user, this is very similar to the way we know validation controls in ASP.NET. The way in which these messages are shown is fully customizable through themes.

sl3_dataform

The screenshot above shows an example of the new Dataform which is also available in Silverlight 3. It also gives you an example of the standard way a user is informed about errors.

With the new Dataform control it is possible to automatically render the CRUD GUI for an object or list of objects.

By implementing the IEditableObject interface for an object, the following events can be handled within the class: BeginEdit, CancelEdit and EndEdit

For more information about the Dataform control see the following blog post of Mike Taulty, another post by Mike Taulty is about data validation

Silverlight 3 Out of browser

This post is about the session called What’s new in Silverlight 3 given by Mike Taulty

In Silverlight 3 it is now possible to run the application as a standalone desktop application. To enable this functionality this must be enabled in the AppManifest.xml file of the application.

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
EntryPointAssembly="TaskList"
EntryPointType="TaskList.App">
<Deployment.Parts>
</Deployment.Parts>
<Deployment.ApplicationIdentity>
<ApplicationIdentity
ShortName="Task List"
Title="Offline Task List">
<ApplicationIdentity.Blurb>
Allows saving your tasks offline
</ApplicationIdentity.Blurb>
</ApplicationIdentity>
</Deployment.ApplicationIdentity>
</Deployment>

The user can now choose to install the application to the computer, on right mouse click the menu below is shown.

sp3_install_menu

Next the user can choose where the shortcuts to the application will be placed.

sl3_install_app

The application can now be run from out of the browser but still in the same secure sandbox. The application is automatically updated whenever a new version of the application is available from the website.

After the application is installed it’s very easy for the user to remove the application from the computer. When running the application under the right mouse menu the option to install the application is now replaced by the option to remove the application.

sp3_remove_menu

Because it’s now possible to run Silverlight applications from the desktop it’s now also become possible to run a Silverlight application without having a internet connection.

A nifty feature is now introduced to Silverlight 3 to adapt to this situation. It’s is now possible to detect whether an internet connection is available or not.

Through the method NetworkInterface.GetIsNetworkAvailable() it’s possible to see if an internet connection is available. Through the NetworkChange.NetworkAddressChanged event network changes can be detected when a user connect or disconnect from the internet.

Older posts «

» Newer posts