C# attributes

Software Development May 26th, 2007

I asked too much by .NET developers about attributes and their meaning. I hope that this post will help you to understand it better.

Introduction: what are attributes?

An attribute is a powerful .NET language feature that is attached to a target programming element (e.g., a class, method, assembly, interface, etc.) to customize behaviors or extract organizational information of the target at design, compile, or runtime. It is a clean approach to associate metadata with program elements and later use the metadata at design, compile or run time to accomplish some common objectives. Attributes come in two flavors: intrinsic and custom. Intrinsic attributes are supplied as part of the Common Language Runtime (CLR), and they are integrated into .NET. Custom attributes are attributes you create for your own purposes. As a thumb-rule, a class is said to be an attribute class, if it directly or indirectly derives from the System.Attribute class. 

Why we need attributes?

For example, ObsoleteAttribute, causes a compile-time warning to appear, letting the developer know that a method should no longer be used. ; Attributes are also used extensively in securing .NET assemblies, forcing calling code to be evaluated against pre-defined security constraints. ; DllImportAttribute that allows a program to communicate with the Win32 libraries; and more…

Once associated with a program entity, the attribute can be queried at run time and used in any number of ways.

Using attributes

Attributes are placed before the item that they will be "decorating" and they are put inside square braces [].

To understand the power of attributes, consider the serialization of an object. In .NET, you just need to mark a class Serializable to make its member variables as Serializable. Serializable attribute: (type of SerializableAttribute)


 12 
 [Serializable()]public  class CustomerData

I didnt use the SerializableAttribute class when applying the attribute to the class. The only time that you can leave off the Attribute portion of the name is when you are applying the Attribute to a class.

 123456789101112 
 public  class MyClass{  [Obsolete("This method replaced by CalcEx method.",  true)]  static  int Calc(int a,  int b ) { } 

  static  int CalcEx (int a,  int b ) { }

  public  static void Main( )  {     int res = Calc(1,2);  }}

I used the attribute Obsolete, which marks a method (in this case) that should not be used. The first parameter is the string, which explains why the item is obsolete and what to use instead. In fact, you can write any other text here. The second parameter tells the compiler to treat the use of the item as an error. The default value is false, which means the compiler generates a warning for this.

When we try to compile this program, we will get an error with the message: MyClass.Calc is obsolete: 'This method replaced by CalcEx method.'

Custom attributes

When do you define your custom attributes? query at runtime!  For example, let's create CryAttribute class:

 12345678910111213141516 
 public  class CryAttribute : Attribute{    private  string m_reason;  public  string Reason  {    get    {      {return m_reason;}    }  }

  
   public CryAttribute( string reason)    {        m_reason = reason;    }}

Now, Let's use this attribute:

 123456789 
 [Cry("Because babies cry..:)")]  // normal babies cry without reasonpublic  class Baby{}

[Cry("The baby is hungry")] // The baby cry because he wants to eatpublic  class HungryBaby : Baby{}

It's great…but what can we do with it?? .NET gives us a new point of the view: runtime attributes querying.

How can we query?

 123456789 
 public  string WhyTheBabyCry(Baby baby){  Type type = baby.GetType();
    object obj = type.GetCustomAttributes()[0];// the first attribute   if(obj  is CryAttribute)    return ((CryAttribute)obj).Reason;   else// other attribute     return "First attribute is not Cry!";}

Now we can use it:

 123456 
 Baby Baby1 =  new Baby();Baby Baby2 =  new HungryBaby();

string reason1,reason2;reason1  = WhyTheBabyCry(Baby1);// receives "Because babies cry..:)"reason2  = WhyTheBabyCry(Baby2);// "The baby is hungry"

More about attributes you can find at msdn.

Tags: ,

How to: Expose Web Services to Client Script in AJAX

Software Development May 11th, 2007

AJAX enables you to call ASP.NET Web services by using client script. There are several steps to enable the web service exposing.

1. Qualify the Web service class with the ScriptServiceAttribute attribute:

123456789 
[ScriptService]public class MyWebService : System.Web.Services.WebService{    [WebMethod]    public string PrintString(String input)    {         return input;    }}

2. Configure the Web application to support calling Web services from script. Register the ScriptHandlerFactory HTTP handler in the Web.config file for the application:

<system.web>
   <httpHandlers>
      <remove verb=”*” path=”*.asmx”/>
      <add verb=”*” path=”*.asmx” type=”System.Web.Script.Services.ScriptHandlerFactory” validate=”false”/>
   </httpHandlers>
<system.web>

Note: The handler delegates the call to the default handler for Web service calls that are not issued from AJAX script.

3. Enable the Web service to be called from script in an ASP.NET Web page:

<asp:ScriptManager runat=”server” ID=”scriptManager”>
   <Services>
      <asp:ServiceReference path=”~/BL/MyWebService.asmx” />
   </Services>
</asp:ScriptManager>

Note: The ServiceReference object can reference a Web service only in the same domain.

JavaScript proxy class for the .asmx Web Service created by the page that contains the ScriptManager control. It occures when this page is rendered. The proxy class has methods that correspond to each Web method in the MyWebService.asmx service.

The next post will be about the way to call the Web Service.

 

del.icio.us tags: , ,

Tags: , ,

Microsoft announced Silverlight

Software Development May 4th, 2007

At Mix07, Microsoft announced Silverlight™.

Microsoft® Silverlight™ is a cross-browser, cross-platform plug-in for delivering the next generation of .NET based media experiences and rich interactive applications for the Web.

You can read more here (SilverLight site), its amazing!

Great post about Silverlight UI Controls, by Ashish Shetty, you can find here.

Tags: , , ,