各位大哥大姐,请耐心看完这个代码啊,属于对象的3种关系的包含关系,可以用对象调取另一个对象的,小弟刚学对象,不是太懂,请各位大侠多多指点阿 未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:行 148:  Car MyCar=new Car();
行 149:  Response.Write("<b>New object 'MyCar' created.</b>");
行 150:  MyCar.objEngine.Name="Xeer";
以下是完整的代码:
----------------------------------------------------------------------------------------------------
<script language="C#" runat="server">
   public class Car
   {
     private string color;
     private int gear;
     private Engine engine;      public Engine objEngine
   {
      get
      {
        return engine;
      }
      set
      {
        engine=value;
       }
    }
    public string Color
    {
      get
      {
        return color;
      }
      set
      {
        color=value;
      }
    }
    public int Gear
    {
      get
      {
        return gear;
      }
      set
      {
        gear=value;
      }
    }
    public void ChangeGear(int Direction)
    {
       if(Direction>0)
       {
         gear++;
       }
       if(Direction<0)
       {
         gear--;
       }
       if(gear>5)
       {
         gear=5;
        }
       if(gear<-1)
       {
         gear=-1;
       }
    }     
          
}
  public class Engine
{
      
      private string serialNo;
      private string rpm;
      private string name;
      private bool _isrunning=false;     public Engine(string Name, string Rpm, string SerialNo)
    {
      name=Name;
      rpm=Rpm;
      serialNo=SerialNo;
    }
      public void SwitchOn(Engine EngineName)
      {
      if(name=="Ferrari" && rpm=="050" && serialNo=="V10")
       _isrunning=true;
       else
       _isrunning=false;
    
      }
      public void SwitchOff()
      {
       _isrunning=false;
       
      }
      public string Name//引用它相当于看成是属性
      {
        get
        {
          return name;
        }
        set
        {
          name=value;
        }
      }
      public string Rpm
      {
        get
        {
          return rpm;
        }
        set
        {
          rpm=value;
        }
      }
      public string SerialNo
      {
        get
        {
          return serialNo;
        }
        set
        {
          serialNo=value;
        }
      }
  public string ISRunning
    {
      get
      {
        if(_isrunning)
        {
          return "The engine is running.";
          }
        else
        {
          return "The engine is not running.";
          }
      } 
   }
}
public void Page_Load()
{  Engine AlexEngine=new Engine("Fdd","060","V3");
  Engine RobEngine=new Engine("Ferrari","050","V1");
  Engine MyEngine=new Engine("Xeer","070","V6");
  
  Car MyCar=new Car();
  Response.Write("<b>New object 'MyCar' created.</b>");
  MyCar.objEngine.Name="Xeer";
  MyCar.objEngine.Rpm="070";
  MyCar.objEngine.SerialNo="V6";
     Response.Write("<hr>Attempting to start MyCar with AlexEngine:");
     
     MyCar.objEngine.SwitchOn(AlexEngine);
     Response.Write(MyCar.objEngine.Name);
     
     Response.Write("<hr>Attempting to start MyCar with RobEngine:");
     MyCar.objEngine.SwitchOn(RobEngine);
     Response.Write(MyCar.objEngine.Name);
     
     Response.Write("<hr>Attempting to start MyCar with MyEngine:");
     MyCar.objEngine.SwitchOn(MyEngine);//用IgnitionName启动ignition属性
     Response.Write(MyCar.objEngine.Name);
     
     MyCar.objEngine.SwitchOff();//关掉引擎  
}
</script>

解决方案 »

  1.   

    MyCar.objEngine.Name="Xeer";的时候 MyCar.objEngine这个对象并木有被创建啊
      

  2.   

    你应该在Car 的构造函数里面把Engine这个类初始化一下
      

  3.   

    MyCar.objEngine=new Engine(.....);
    然后在赋值
      

  4.   

    objEngine  需要new 出来 
      

  5.   

    Car MyCar=new Car();
    MyCar.objEngine = MyEngine;
    MyCar.objEngine.Name="Xeer"; 
      

  6.   

    private string color;
        private int gear;
        private Engine engine = new Engine(); 
      

  7.   

    MyCar.objEngine.Name
    这个没有定义或者创建,找找看
      

  8.   

    就是了。。没有new的问题,又不是静态的。不能直接调用方法
      

  9.   

    问题解决了,  
    Car MyCar=new Car();
    MyCar.objEngine=new Engine("Xeer","070","V6");......
    MyCar.objEngine=new Engine("Ferrari","050","V1");
    MyCar.objEngine.SwitchOn(RobEngine);
    Response.Write(MyCar.objEngine.Name);
    Response.Write("<br/>"+MyCar.objEngine.ISRunning);