[Mono-list] C# General Question...

Eric J. Peters erpeters@informationinplace.com
Mon, 13 Jan 2003 10:05:23 -0500


Hi-

...
> The short answer is that C# doesn't allow different protection levels
> for properties.  Period.

Bummer.

...
> If you *really* want to use a property, name it differently:
> 
> 	class A {
> 		private int data;
> 		public int Data {
> 			get {return data;}
> 		}
> 
> 		protected int InternalData {
> 			get {return data;}
> 			set {data = value;}
> 		}
> 	}

That's a good idea.  Obvious, simple, and elegant.

	Thanks,
	-Eric.

> 
>  - Jon
> 
> On Mon, 2003-01-13 at 08:08, Eric J. Peters wrote:
> > Hi-
> > 
> > class A is the simplest example of the protection levels I could come up with, but doesn't
> > really do anything to explain the thought behind the question, I apologize.
> > 
> > Here it is again:
> > 
> > > > class A {
> > > >    private int m_data = 1;
> > > >    public int Data {
> > > >       get { return m_data; }
> > > >    }
> > > >    protected int Data {
> > > >       set { m_data = value; }
> > > >    }
> > > > }
> > 
> > First, the accessors are necessary in the real implementation because the act of getting
> > and setting isn't trivial (as it is in class A).  Besides, accessors are good practice,
> > especially when anticipating code reuse; which is also expected in the real implementation.
> > 
> > The property 'Data' is publically gettable, but not publically settable --  a read-only
> > property for anything but child classes.
> > 
> > Since the setting is non-trivial, I don't want to allow subclasses to directly set the
> > member, but to use the property setter.  True, I could just make the setter public, but
> > that just ain't right from a overly anal-retentive software engineering perspective.
> > 
> > Currently to accomodate all of that, I have a 'protected setData(int)' member to allow for
> > setting the data by the class (and it's subclasses).  However, that is not consistant with
> > the accessor model that C# uses, and is just wrong for the same SE perspective mentioned
> > above.
> > 
> > I scanned the ECMA spec, but came up empty handed.  Anyone know of a way to code the
> > get and set accessors with different protection levels?
> > 
> > 	-Eric.
> > 
> > On Sat, 11 Jan 2003, Dan Guidara wrote:
> > 
> > > On Fri, 2003-01-10 at 19:09, Eric J. Peters wrote:
> > > > Hi-
> > > > 
> > > > 	While this isn't a mono-specific question, I think this list, being
> > > > very technical and C# based, is the best place I know of to ask.
> > > > 
> > > > 	Imagine a class as shown here:
> > > > 
> > > > 
> > > > class A {
> > > >    private int m_data = 1;
> > > >    public int Data {
> > > >       get { return m_data; }
> > > >    }
> > > >    protected int Data {
> > > >       set { m_data = value; }
> > > >    }
> > > > }
> > > > 
> > > > 
> > > > 	Obviously, this is a compile-time error.  My specific question is if
> > > > there is a language mechanism to allow for different access levels between the
> > > > two different accessors.  If not, then I would be interested in hearing why
> > > > not -- it seems like a significant oversight to me.
> > > > 
> > > > 	Thanks,
> > > > 	-Eric.
> > > > 
> > > > _______________________________________________
> > > > Mono-list maillist  -  Mono-list@ximian.com
> > > > http://lists.ximian.com/mailman/listinfo/mono-list
> > > > 
> > > 
> > > 
> > > Eric,
> > > 	I am not sure why you would want to do that. Its my understanding that
> > > Properties are public in their nature to allow an interface for setting
> > > internal variables in a controlled manner from extranal classes, etc. I
> > > quess you could create functions with the desired protection levels to
> > > read and write the values. I am not sure where the oversight comes into
> > > it at all. 
> > > 
> > > Dan
> > > 
> > > 
> > > 
> > > _______________________________________________
> > > Mono-list maillist  -  Mono-list@ximian.com
> > > http://lists.ximian.com/mailman/listinfo/mono-list
> > --
> > Moore's Law has been the name given to everything that changes exponentially.
> > I saw, if Gore invented the Internet, I invented the exponential.
> > 
> > 	-Gordon Moore
> > 
> > _______________________________________________
> > Mono-list maillist  -  Mono-list@ximian.com
> > http://lists.ximian.com/mailman/listinfo/mono-list
--
Moore's Law has been the name given to everything that changes exponentially.
I saw, if Gore invented the Internet, I invented the exponential.

	-Gordon Moore