Prior to .NET 2.0, there wasn’t the facility in C# to opt the visibility level for the get and set property 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:-
public bool LogToStdError
{
get
{
return _log2StdError;
}
protected set
{
_log2StdError = value;
}
}
I do not have to explain the code except there are some restrictions while having different visibility levels for the get/set accessors of a property.
- You can provide an explicit visibility either for get or set. Hence the following code will throw an error:-
public bool LogToStdError
{
protected get
{
return _log2StdError;
}
protected set
{
_log2StdError = value;
}
}
- 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:-
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.
- The get and set accessors individually have to specify the visibility level.
bool LogToStdError
{
public get
{
return _log2StdError;
}
property set
{
_log2StdError = value;
}
}
- 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
:-
public bool LogToStdError
{
get
{
return _log2StdError;
}
set
{
_log2StdError = value;
}
}
and as per this property definition, the get/set accessors are protected:-
protected bool LogToStdError
{
get
{
return _log2StdError;
}
set
{
_log2StdError = value;
}
}
- 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:-
bool LogToStdError
{
get
{
return _log2StdError;
}
set
{
_log2StdError = value;
}
}