In C#, any variable with a 'reference type' (i.e. the variable's type is a class or string) could be considered 'handles'.
In C#, the code inside a method can 'see':
- Variables that got passed to the method.
- Variables that got created in the method.
- Member variables of the class that contains the method.
- Public Static (or "global") variables inside any class.
There are several possible ways to make your two classes 'share' data:
- When you 'new' a class, you can pass data via the constructor.
- If you have a reference to a class, you can assign to any of its public fields or public property setters.
- If you have a reference to a class, you can call any of its public methods and pass your data as an argument (SiCrane's example).
- You can make your data 'public static' and then any class can access it directly (try to avoid using this unless you have to).
Examples:
FormInventory inventory = new FormInventory(player); // Passing it via the constructor.
inventory.Player = player; // Using a field/property setter.
inventory.SetPlayer(player); // Passing it to a method.
var player = Form1.Player; // Accessing it via a global (public static) field/property. (This code would be written in FormInventory's methods)
I think my big problem is - VB.NET let me get away with alot of bad tricks to make this work. C# seems to be pretty strict - OOP or nothing.
It's going to take me a while to re-learn the proper way.