//this class is visible to anyone
public class Person
{
	private int age; //this is private
	string name; //this is also private
	public string address; //this field is visible to anyone

	//this method is visible from anywhere inside the assembly
	internal void DoSomethingInternally() { }

	//this method is visible from anywhere
	public void DoSomethingPublically() { }

	//this method is visible only within the type
	//as the default is private
	void DoSomethingPrivately() { }
}

class RefPerson
{
	public int age;
	public string name;
}

struct ValPerson
{
	public int age;
	public string name;
}
class App
{
	static void Main(string[] args)
	{
		//initilize the reference type
		RefPerson p = new RefPerson();
		p.age = 33;

		//initialize the value type
		ValPerson vp;
		vp.age = 33;

		//the following code will not compile as it is a reference type
		//there will be an error: 'Use of unassigned local variable 'p1''
		//RefPerson p1;
		//p1.age = 33;
	}
}
