我有这样的事情:
public class Map
{
class DataHandler
{
private int posX, posY;
// Other attributes
public int GetX() { return posX; }
public int GetY() { return posY; }
// Other functions for handling data (get/set)
}
class FileHandler
{
// Functions for reading/writing setting files
}
DataHandler Data;
FileHandler Files;
public Map()
{
Data = new DataHandler();
Files = new FileHandler();
}
}
现在,当我写一个设置文件时,我需要读取DataHandler
类的一些变量(非静态)。
例如,假设我想使用posX
和posY
方法获取GetX
和GetY
的值,以便将它们写入文件中。如何从“文件”实例访问Map中的“数据”实例?
我知道我可以作为参数传递给写入文件的函数,DataHandler类的实例,但它不像我想的那样。在我的想法中,它应该自己读取数据(在这种情况下为posX
和posY
),因为它在同一个Map
类中。有干净的方法吗?
编辑:
我可以将Map
类的实例传递给FileHandler
构造函数,因此它有一种方法可以访问其父类,因此也可以访问Data,但我知道这不是解决问题的好方法。问题。
所以,改变我的结构是没有问题的,我知道它有问题,否则我不会有这个问题,但我不知道如何改变它。如果您有任何建议,请随时写下来。
只是为了更好地解释上下文。我有一个地图,它由各种数据(x,y,高度,宽度,名称......),一些描述它的图像组成(例如,地形高度的RGB图像,我已经计划好了处理图像的类)和一些设置文件。在其中一个文件中必须写入一些地图数据。 所以,我的想法是有一个父Map类,里面有三个用于处理数据,图像和文件的类,但是这个问题出现了,所以我认为这不是一个好的结构。
答案 0 :(得分:2)
在我的想法中,它应该自己读取数据(在这种情况下是posX和posY),因为它在同一个Map类中。有干净的方法吗?
没有。您必须在DataHandler
课程的FileHandler
和Map
之间来回传递数据,他们不会自动获知对方的存在。
如果您可以解释一切应该做什么,那将非常有用,因为您的类名似乎有点过于通用。
答案 1 :(得分:0)
如果您强烈反对更改结构(但建议采用这种方式),我建议您重构DataHandler和FileHandler - 将其实现为Singleton,因此在代码的任何行中,您都可以通过DataHandler.Instance.GetX()
和{{{ 1}}。
单身人士的基本实施是:
FileHandler.Instance.SomeMethod()
UPD:我的样本不是线程安全的。