views:

187

answers:

4

How can I make a Property "ReadOnly" outside the Assembly (DLL) for people using the DLL but still be able to populate that property from within the assembly for them to read?

For example, if I have a Transaction object that needs to populate a property in a Document object (which is a child class of the Transaction class) when something happens in the Transaction object, but I just want to developer using my DLL to only be able to read that property and not change it (it should only be changed from within the DLL itself).

+6  A: 

If you're using C# you can have different access modifiers on the get and set, e.g. the following should achieve what you want:

public int MyProp { get; internal set; }

VB.NET also has this capability: http://weblogs.asp.net/pwilson/archive/2003/10/28/34333.aspx

Greg Beech
+1  A: 

What language? In VB you mark the setter as Friend, in C# you use internal.

Jonathan Allen
+6  A: 

C#

public object MyProp {
   get { return val; }
   internal set { val = value; }
}

VB

Public Property MyProp As Object
   Get
      Return StoredVal
   End Get
   Friend Set(ByVal value As Object) 
      StoredVal = value
   End Set
End Property
Mehrdad Afshari
+3  A: 

C#

public bool MyProp {get; internal set;} //Uses "Automatic Property" sytax

VB

private _MyProp as Boolean
Public Property MyProp as Boolean
   Get
      Return True
   End Get
   Friend Set(ByVal value as Boolean)
      _MyProp = value
   End Set
End Property
Micah