c#从嵌套类混淆访问类

时间:2011-10-28 19:35:33

标签: c# nested-class

我创建了一个库类,其中......

public class CircuitLibrary
{
   // Fields, properties, methods, etc.
   ...

   // Nested classes.
   public class Sensor
   {
      // Enums.
      public enum Sensors { Sensor1, Sensor2, Sensor3, ... };

      ...
   }

   public class SerialCommands
   {
      // Fields, properties, etc.
      ...

      // Nested classes.
      public class SensorSettingsCommands
      {
         // Fields, properties, etc.
         ...

         public void SomeMethod()
         {
            ...
            if( Sensor.Sensors.IsOn ) // Doesn't like this. OK if I change to CircuitLibrary.Sensor.Sensors.IsOn. Why?
               ...
          }
      }
   }
}

以下是我收到的错误:

Cannot access a nonstatic member of outer type
"MyCircuitLibrary.CircuitLibrary.SerialCommands" via nested type
"MyCircuitLibrary.CircuitLibrary.SerialCommands.SensorSettingsCommands" 

所以看起来它正在Sensor中搜索(并找到?)SerialCommands?但是,如果我将其更改为CircuitLibrary.Sensor,它现在知道它在CircuitLibrary中?当我右键单击并“转到定义”时,它发现它没问题并且没有说“在Sensor中找不到SerialCommands”。如果有人可以帮助解释发生了什么,我会很感激。

谢谢!

1 个答案:

答案 0 :(得分:3)

您的SerialCommands类具有非静态Sensor属性。

由于此属性比最外层的Sensor类更接近您的代码,因此编译器认为您使用的是属性而不是类。 由于在没有SerialCommands实例的情况下无法使用非静态属性,因此会出现错误。

当你编写CircuitLibrary.Sensor时,它工作正常,因为没有CircuitLibrary属性来混淆编译器。