Click here to Skip to main content
15,884,099 members
Articles / Programming Languages / C#

Properties C# 2.0 - Not Elegant Enough !!!

Rate me:
Please Sign up or sign in to vote.
3.67/5 (3 votes)
1 Aug 2010CPOL1 min read 10.1K   2
Properties C# 2.0 are not elegant enough

Prior to .NET 2.0, there wasn't the facility in C# to opt the visibility level for the get and set properties or indexers. And I take my comment in my previous post that C# does not provide the facility of having different visibility levels for the get and set accessors. While that is partly correct, it is no more in C# 2.0.

And obviously, it isn't in the easy and elegant way. Take a look at this code snippet:

C#
public bool LogToStdError
{
   get
   {
      return _log2StdError;
   }
   protected set
   {
      _log2StdError = value;
   }
}

I do not have to explain the code except that there are some restrictions while having different visibility levels for the get/set accessors of a property.

  1. You can provide an explicit visibility either for get or set. Hence the following code will throw an error:
    C#
    public  bool LogToStdError
    {
       protected get
       {
          return _log2StdError;
       }
       protected set
       {
          _log2StdError = value;
       }
    }
  2. The visibility thus explicitly specified must be a subset [restrictive than] of the property declaration. For example, if the property declaration is protected, then the get/set accessor cannot be like say public. So the following code throws an error:
    C#
    protected  bool LogToStdError
    {
       get
       {
          return _log2StdError;
       }
       public  set
       {
          _log2StdError = value;
       }
    }

I feel that these restrictions are stupid, and this resulted because of the syntax. I just thought of some ideas for a bit elegant syntax for the property definition.

  1. The get and set accessors individually have to specify the visibility level.
    C#
    bool  LogToStdError
    {
       public  get
       {
          return _log2StdError;
       }
       protected set
       {
          _log2StdError = value;
       }
    }
  2. The property declaration syntax must not bear any visibility level unless the associated get/set accessors do not bear any. For example, in the property definition below, the get/set accessors are public:
    C#
    public  bool LogToStdError
    {
       get
       {
          return _log2StdError;
       }
       set
       {
          _log2StdError = value;
       }
    }

    and as per this property definition, the get/set accessors are protected:

    C#
    protected  bool LogToStdError
    {
       get
       {
          return _log2StdError;
       }
       set
       {
          _log2StdError = value;
       }
    }
  3. If there are visibility levels specified neither in the property definition nor in the accessors, then the default visibility level as specified for C# [I guess internal] will be applied for the property accessors. Hence the get/set accessors are internal for the following property:
    C#
    bool  LogToStdError
    {
       get
       {
          return _log2StdError;
       }
       set
       {
          _log2StdError = value;
       }
    }

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
General[My vote of 2] Interesting, but... Pin
Kubajzz30-Jul-10 5:59
Kubajzz30-Jul-10 5:59 
GeneralRe: [My vote of 2] Interesting, but... Pin
kb-boxer1-Aug-10 20:32
kb-boxer1-Aug-10 20:32 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.