Not all properties are value types...
struct foo
{
int i;
string s;
object o;
}
foo is a value type
foo.i is a value type
foo.s is a reference type (becuase string is an object)
foo.o is a reference type
The rule also doesn't apply to arrays, while the array itself is a reference type you can have arryas of value types int[] and reference types object[]
I'm not 100% what you mean by message passing - feel free to give me an example in a different language or a scenario that you can think of. In general the purpose fo putting things into classses is to encapusalte the things that each class neds and then you procive access through the classes external interface only. Diving into the structures of another class would violate that encapsualtion.
The message passing between classes is generally done using method calls (see http://en.wikipedia.org/wiki/Object-oriented_programming#Fundamental_concepts) which are supported in Phrogram. Though in this case Message Passing is about classes communicating rather than directly exposing their innards directly.
Managed DirectX and XNA ? Check out
http://www.thezbuffer.com