各位大哥大姐,请耐心看完这个代码啊,属于对象的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>
说明: 执行当前 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>
然后在赋值
MyCar.objEngine = MyEngine;
MyCar.objEngine.Name="Xeer";
private int gear;
private Engine engine = new Engine();
这个没有定义或者创建,找找看
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);