【问题标题】:Accesing class methods/variables from another class从另一个类访问类方法/变量
【发布时间】:2015-01-21 23:48:33
【问题描述】:

真是愚蠢的问题,我有私有变量,我封装了它,现在我想从另一个类访问它们。

我在一个类中也有一个列表,并且希望很多类都可以访问该列表(称为字段的对象列表)(创建一个简单的农场模拟器)。 那么如何从另一个类访问它们呢?

  1. 我知道我可以创建一个类的实例,但是对于列表,这是否意味着当我在要访问列表的类中创建类的实例时我的列表将不一样在?

  2. 我认为我不能使用 Namespace.class.Something,因为它们不是静态的,或者我可以吗?

  3. 也许对列表使用继承还是不行?

请帮忙,真的很感激任何帮助! *提前谢谢你

【问题讨论】:

  • 了解properties
  • ?您是否打扰阅读我的问题
  • 我知道,但我也有列表,如果我创建许多实例,它们不会有所不同,看看你是否阅读了这个问题,你可能会看到我遇到了什么问题
  • 您是否费心阅读任何 C# 书籍/教程,请阅读如何在此处提问。事实上,作为第一篇文章,你也可以更有礼貌一点......
  • 属性的使用对列表也有效。您需要使用相同的类实例或将类/属性设为静态。

标签: c# list class variables methods


【解决方案1】:

您不能从另一个类中访问私有成员(该成员是嵌套类的成员除外)。因此,Konrad Kokosa 提出的使用 Properties 的建议绝对没问题,因为它们应该用于控制来自实际类外部的访问。话虽如此,您可以将该属性的访问修饰符设置为 public 或从该类派生(但是,您必须对属性使用受保护的访问)。

MyClass {
    public static List<Field> MyList {get;set;}
}

AnotherClass {

    AnotherClass() {
        MyClass.MyList = // whatever
        // or also possible
        MyClass.MyList.Add(/*new Item*/);
    }
}

【讨论】:

  • 我知道,我知道我可以这样访问它们,而且我可能会,但是列表呢,如果我创建列表类的许多实例,列表不会在每个实例中都不同或我错了吗?
  • public static IList Fields = new List();
  • @KlaudijusMisekkas 查看我更新的包含静态属性的代码
  • 所以如果我使用使用 MyClass instance = new MyClass(); ,并且 instance.mylist 在我创建的每个类中都是相同的,因为我将在不同的类中添加和更改列表。如果你明白我的意思
  • @KlaudijusMisekkas 在这种情况下你不需要 MyClass 的实例,我为此场景更新了我的代码
【解决方案2】:

私有成员不能在类之外使用(除非你使用反射,我不推荐)。如果您希望成员可用于外部课程,则必须将它们设为“公开”。如果您希望您的成员仅对所有派生类可用,请使用“protected”。

【讨论】:

    【解决方案3】:

    如果您想从所有其他类访问相同的列表,您应该将其声明为静态:

    private static List<Field> s_fields = new List<Field>();
    public static List<Field> Fields { get { return s_fields; } }
    

    【讨论】:

    • 嗯,谢谢,我会试试,你认为使用这个是好还是坏,(使用静态)
    • 一般来说不是一个好习惯 - 但这是一个非常广泛的问题,取决于您的偏好以及您拥有的现有框架
    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    相关资源
    最近更新 更多