No, this has nothing to do with properties.
A class is a reference type. A variable, property, field, whatever you
pick, will hold a pointer to a place in memory where the actual class it.
This type of code:
Sample s1 = new Sample();
Sample s2 = s1;
does not produce two copies of an object of Sample. It produces two
references to the one object.
Let me explain it another way.
A house is built from a blueprint, in a location and given an address.
(blueprint is the class, the house is the object, the address is the
reference).
It doesn't matter how many pieces of paper you write down the address to,
if you go to the house and rearrange the furniture, the house from all
those addresses will still be just the one house, and it doesn't matter
which paper you pick, they all lead to the same one house. To an observer
that only reads the address, goes to the house, and doesn't look at the
surroundings, it might look like he has many pieces of paper that leads to
identical (but separate) houses, but he's in reality just visiting the
same house over and over again.
A value type, which is used for structs and all the base types for numbers
(among other things), is not a pointer, and thus the value itself is
copied, which means that each value is separate. You can, similar to the
one above, think of it like a number on a piece of paper. If you copy the
number to a new paper, but then alter the number on the original paper
afterwards, the copy is still as it was when it was made, ie. unchanged.
Now you have two pieces of papers with different numbers on them.
Strings are something inbetween (simplified explanation). They are pure
reference types, which means that a variable holding a string holds a
pointer to a location in memory where the string data is stored. The
difference is that string objects in .NET are made immutable, which mean
that once they are created, they will never change. Thus, if you construct
a new string, it will be in a different location in memory, and thus have
a new address. If you think of the house, instead of rearranging the
furniture, "changing a string" means constructing a new, almost identical
house, except for the changes from the original.
This code:
String s1 = "test";
String s2 = s1 + "!";
constructs two string objects, that are different.
All this is true also for Visual Basic.NET and other .NET languages. If
you have evidence to the contrary, I suggest you post it because I'm
confident that there's something else that is different in the VB solution
as well, that makes you observe different things.
Hope all of this was clear, if not, poke holes in it and ask more
questions. If I incorrectly assumed you didn't know all this, I apologize
for the lecture