How many times did you need a property to be read-only for the users of your API, but also you needed that property to be populated by your own data access layer?

It happened to me many times, and I usually solved that problem accessing directly the underlying field changing its visibility from private to internal or protected.

But what if you want to access everything as a property and don't want to hook directly to the field?
You need to be able to specify for the setter a different visibility for the getter.

Here is how:

        private int _id;

        public int Id
        {
            get { return _id; }
            internal set {  _id = value; }
        }

That's a feature of C# I like a lot, and that allows a lot of flexibility.

Just have to remember that the setter visibility modifier must be more restricted than the general one.

UPDATE: This feature is available only with .NET 2.0 (Thank Bill for pointing it out)