c#类访问从嵌套类混淆

本文关键字:嵌套 访问 | 更新日期: 2023-09-27 18:12:54

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

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" 

所以它看起来像是在搜索(并且找到了?)SerialCommands中的Sensor ?但是如果我把它改成CircuitLibrary.Sensor,它现在知道它在CircuitLibrary?当我右键单击并"转到定义"时,它会发现它是好的,并没有说"在SerialCommands中找不到Sensor"。如果有人能帮我解释一下这是怎么回事,我会很感激的。

谢谢!

c#类访问从嵌套类混淆

你的SerialCommands类有一个非静态的Sensor属性。

因为这个属性比最外面的Sensor类更接近你的代码,编译器认为你在使用属性而不是类。
因为在没有SerialCommands实例的情况下不能使用非静态属性,所以会得到一个错误。

当你写CircuitLibrary.Sensor时,它工作得很好,因为没有CircuitLibrary属性来混淆编译器