C#-访问另一个类方法

C#-访问另一个类方法,c#,class,methods,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 (g

我有这样的想法:

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
类的一些变量(非静态)。 例如,假设我想使用
GetX
GetY
方法获取
posX
posY
的值,以便将它们写入文件中。如何从“文件”实例访问映射中的“数据”实例? 我知道我可以作为参数传递给写文件的函数,DataHandler类的实例,但这和我想象的不一样。在我看来,它应该自己读取数据(
posX
posY
),因为它在同一个
Map
类中。有没有干净的方法可以做到这一点

编辑:

我可以将
Map
类的实例传递给
FileHandler
构造函数,这样它就可以访问其父类,从而访问数据,但我知道这不是解决问题的好方法。 所以,改变我的结构没有问题,我知道这里面有问题,否则我不会有这个问题,但我不知道如何改变它。如果你有任何建议,尽管写吧

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

在我看来,它应该自己读取数据(本例中为posX和posY),因为它位于同一个Map类中。有没有干净的方法可以做到这一点

不可以。您必须在
Map
类中的
DataHandler
FileHandler
之间来回传递数据,它们不会自动获得彼此存在的通知


如果你能解释一下每件事都应该做些什么,这将非常有帮助,因为你的类名似乎有点过于泛化。

如果你强烈反对改变结构(但这是推荐的方法),我建议你重构DataHandler和FileHandler-将其实现为单例,因此,在代码的任何一行中,您都可以通过
DataHandler.Instance.GetX()
FileHandler.Instance.SomeMethod()
访问它

singleton的基本实现是:

class DataHandler
{
    private DataHandler() {}
    public GetX() { ... }

    private static DataHandler instance = null;

    public static Instance
    {
        get
        {
            if (instance == null)
            {
                return (instance = new DataHandler());
            }
        }
    }
}

UPD:我的示例不是线程安全的。

如果我理解正确,您的结构应该稍微改变一下。FileHandler类应该有一个接受Map(或DataHandler)实例并写入数据的方法。更不用说示例中的设计失败了……这在技术上是不可能的。您预计fileHandler将如何访问他的地图?从技术上讲,可能有很多对象持有对fileHandler的引用,因此没有“父”对象这样的概念(只有父类才有意义)。