使变量可供任何对象访问

时间:2014-07-24 03:17:57

标签: c# scope

假设我有一个贯穿对象列表的循环,

foreach( object pawn in objectList )
{
   pawn.update();
}

这会运行所有更新代码,对吗?很简单,因为您不必将任何信息传递给更新函数以使所有对象都运行。

如何在列表中的一个对象中访问此对象数组?或者那个问题的任何对象?有点像你总能从控制台获得成员。

例如,我可以在任何对象中检索类似Console.BackgroundColor的值。如何使用对象列表执行此操作?

this.value = Console.BackgroundColor // You can access it directly from the class.

2 个答案:

答案 0 :(得分:3)

这涉及实例与静态方法。 Console.BackgroundColor是一个静态属性,所以它随处可用。你的循环调用实例方法,因此它只能在它有直接引用的实例上调用方法。

我建议您阅读有关静态与实例方法的更多信息。

http://cplus.about.com/od/howtodothingsinc/a/An-Overview-Of-Static-and-Instance-In-C.htm

答案 1 :(得分:1)

可以访问类的静态公共成员

例如

public static class Blah 
{
   public static List<MyObject> Stuff = new List<MyObject>();
}
可以使用Blah.Stuff;

从任意位置访问

但是。

这通常是一个坏主意。大多数情况下,如果您稍微调整一下设计,则不需要像这样的全局访问。它对TRULY全球资源最有用。

根据您的情况,您可能需要类似

的内容
   foreach( IChild pawn in objectList )
    {
       pawn.Parent = objectList;
       pawn.update();
    }

其中

public interface IChild
{
   void update();
   List<IChild> Parent { get; set; }
}