C# - Question about OOP , using objects across multiple forms

Started by
12 comments, last by TheTroll 12 years ago

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.

Amateur want to be - Game Developer.

Advertisement

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)


The InventoryForm has to see the player's inventory, not the player. I would have an inventory class, that the player has as part of it. Then when you create the InventoryForm you use the Form constructor to pass the player's inventory. InventoryForm inform = new InventoryForm(player.Inventory);

So why do this? Because then you can have other things with inventories. Merchants, monsters, chests, doesn't matter. They could all be handled by a single InventoryForm.
Not a bad idea at all. For the moment, I need to keep it really simple - but long term - that is where I will go with it.

Amateur want to be - Game Developer.


Not a bad idea at all. For the moment, I need to keep it really simple - but long term - that is where I will go with it.


Since you are learning, I would suggest you do it the "right" way when ever possible. It take a little bit more work but you will learn more that way.

This topic is closed to new replies.

Advertisement