从另一个类C#访问原始数组

时间:2011-05-25 17:13:37

标签: c# arrays class

我正在开发一款游戏,我的角色和类都有一个类来处理GUI。

在角色类中,我有一个结构数组,其中包含有关角色技能的数据。我正在尝试使用GUI类访问此数组,以显示有关技能的信息。

要在另一个类中使用一个类,我需要初始化它的一个新实例,它会重置我在此期间可能已更改的值。有没有办法传递那个数组?我无法将其设为只读,因为我仍然需要更改数组。该类数组也未在GUI类中进行修改。

此外,将来我将把这些数据保存在XML或数据库中。是否有可能在每次需要时从这些文件中获取信息?而不是必须使用传递数组和类似的东西。或者甚至计算服务器端的所有内容?

提前致谢!

西蒙。

6 个答案:

答案 0 :(得分:2)

如果您想为整个程序创建一个数组,只需创建数组public static即可。如果您希望该类能够访问您传递的字符内的数组,请创建数组public或创建get部分为public的属性。

答案 1 :(得分:1)

如果您的类不是静态的(似乎不是),您可以将该数组定义为character类的属性,并且可以访问类似于myCharacter.Skills的数组。

如果您想要在多个项目中访问您的实体(在您的案例中为character类),您可以实现多层体系结构并在隔离的类库中定义您的实体并引用此类库任何应该有权访问您实体的项目。

答案 2 :(得分:1)

如果可以避免,将数据直接传递到GUI是不好的做法。我建议使用Model-View-Controller模式或Model-View-Presenter模式。如果您正在使用WPF,则应该查看Model-View-ViewModel。

基本上,你需要一个负责维护数据的类(无论是存储在内存中,数据库中等),视图需要从数据中抽象出来,还需要为表示格式化它/显示目的(演示者)。

以下是简要概述:http://en.wikipedia.org/wiki/Model-view-presenter

答案 3 :(得分:1)

你的角色应该是静态的,或者你应该存储你的角色的引用(或者你的GUI类中的List<Character>。此外,最好不要直接访问维护的结构列表如果你只想打印你的角色信息。你的角色类应该提供一个方法来打印出字符数据,即character.printCharacterInfo()将返回一个字符串,或者character.getCharacterInfo将返回struct包含该类的数据,您的GUI类可以使用它来做任何想做的事情。

答案 4 :(得分:0)

你在Array中使用结构吗?

这样,您可能正在访问副本,它们不是C#中的引用类型。

public struct PointStruct
    {
        public int X;
    }

    public class PointClass
    {
        public int X;
    }

    [TestMethod]
    public void TestStruct()
    {
        var structArray = new PointStruct[1];
        var classArray = new PointClass[1];

        int x;

        x = structArray[0].X;

        try
        {
            x = classArray[0].X;
        }
        catch(NullReferenceException e)
        {
            Console.WriteLine(e.Message);
        }

        classArray[0] = new PointClass();

        // It's now ok
        x = classArray[0].X;

        var point1 = structArray[0];
        var point2 = classArray[0];

        point1.X = 1;
        point2.X = 1;

        Assert.IsTrue(point2.X == 1);
        Assert.IsFalse (structArray[0].X == 1);

        structArray[0].X = 1;
        Assert.IsTrue(structArray[0].X == 1);
    }

答案 5 :(得分:0)

我搜索了我的问题并带到这里,我用这里的答案来做我的。

当用户点击按钮时,我希望代码在另一个名为Logic的类中执行。我的主要课程名为MainWindow。

我有一系列颜色链接到MainWindow中的两个矩形。为了能够访问存储在数组中的值,我只需要这样做。

public partial class MainWindow : Window
{

 Rectangle[] choice;
 SolidColorBrush black;
Became
 public static Rectangle[] choice;
 public static SolidColorBrush black;

}

在我的Logic类中访问它我必须这样做。

MainWindow.choice[0].Fill = MainWindow.black;

希望能帮助任何人。