C# - 访问另一个类方法

时间:2013-05-22 14:28:21

标签: c# class methods

我有这样的事情:

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类的一些变量(非静态)。 例如,假设我想使用posXposY方法获取GetXGetY的值,以便将它们写入文件中。如何从“文件”实例访问Map中的“数据”实例? 我知道我可以作为参数传递给写入文件的函数,DataHandler类的实例,但它不像我想的那样。在我的想法中,它应该自己读取数据(在这种情况下为posXposY),因为它在同一个Map类中。有干净的方法吗?

编辑:

我可以将Map类的实例传递给FileHandler构造函数,因此它有一种方法可以访问其父类,因此也可以访问Data,但我知道这不是解决问题的好方法。问题。 所以,改变我的结构是没有问题的,我知道它有问题,否则我不会有这个问题,但我不知道如何改变它。如果您有任何建议,请随时写下来。

只是为了更好地解释上下文。我有一个地图,它由各种数据(x,y,高度,宽度,名称......),一些描述它的图像组成(例如,地形高度的RGB图像,我已经计划好了处理图像的类)和一些设置文件。在其中一个文件中必须写入一些地图数据。 所以,我的想法是有一个父Map类,里面有三个用于处理数据,图像和文件的类,但是这个问题出现了,所以我认为这不是一个好的结构。

2 个答案:

答案 0 :(得分:2)

  

在我的想法中,它应该自己读取数据(在这种情况下是posX和posY),因为它在同一个Map类中。有干净的方法吗?

没有。您必须在DataHandler课程的FileHandlerMap之间来回传递数据,他们不会自动获知对方的存在。

如果您可以解释一切应该做什么,那将非常有用,因为您的类名似乎有点过于通用。

答案 1 :(得分:0)

如果您强烈反对更改结构(但建议采用这种方式),我建议您重构DataHandler和FileHandler - 将其实现为Singleton,因此在代码的任何行中,您都可以通过DataHandler.Instance.GetX()和{{{ 1}}。

单身人士的基本实施是:

FileHandler.Instance.SomeMethod()

UPD:我的样本不是线程安全的。