I'm having trouble understanding OOP in general, but specifically in C#.
If I have a player object created on my main form... (Form1), how do I talk to that
same player object in another form? ie: FormInventory.
Hopefully I've worded all that ok.
C# - Question about OOP , using objects across multiple forms
Pass a handle to the player object to the FormInventory object. This can be part of the FormInventory's constructor or another function or even a property or variable.
I've never heard of handles, maybe this is why I'm having trouble doing this.
I will try to to figure this out, thanks SiCrane.
I will try to to figure this out, thanks SiCrane.
Sorry, in C# they're called references. I think you're overthinking this. It's really as simple as something like:
or something similar (assuming Player is a reference type).
Player player = new Player;
FormInventory inventory = new FormInventory;
inventory.SetPlayer(player);
or something similar (assuming Player is a reference type).
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':
There are several possible ways to make your two classes 'share' data:
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)
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)
What I don't understand is why your InventoryForm needs to access the player Object?
At a guess, I'd say it would be to retrieve the contents of the player's inventory and other parameters like carrying capacity?
[quote name='TheTroll' timestamp='1334543437' post='4931615']
What I don't understand is why your InventoryForm needs to access the player Object?
At a guess, I'd say it would be to retrieve the contents of the player's inventory and other parameters like carrying capacity?
[/quote]
That would mean the player object would need to access the inventory, not the other way around. I can't see a reason inventory needs to access the player.
Hypothetically, if InventoryForm was also used to display other entity's inventory, such as a shop keeper or someone you're pick pocketing, you could pass a reference to the person whose inventory you're going to be displaying to the form and have it sort it out.
Thanks for all the reply's, I'll read these through and make sure I understand.
And yeah... the Inventory needs to see the player's inventory, so it can display the player's inventory. I've done the inventory this way....
player.hasSword = true
player.hasShield = false
player.qtyFood = 5
player.gold = 5
(The inventory item's are variables in the player class - for simplicity sake)
And yeah... the Inventory needs to see the player's inventory, so it can display the player's inventory. I've done the inventory this way....
player.hasSword = true
player.hasShield = false
player.qtyFood = 5
player.gold = 5
(The inventory item's are variables in the player class - for simplicity sake)
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement