c#输出结果应该是什么呀,不懂,求解答
发布网友
发布时间:2022-04-24 19:04
我来回答
共5个回答
热心网友
时间:2023-10-04 01:40
亲测代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
NewVechicle tong = new NewVechicle();
tong.Speed = 30;
Console.ReadKey();
}
}
public class Vehicle
{
private int speed = 10;
public int Speed
{
get { return speed; }
set
{
speed = value;
Console.Write("禁止驶入");
}
}
}
public class NewVechicle : Vehicle
{
public NewVechicle()
{
if (this.Speed >= 20)
Console.Write("机动车!");
else
Console.Write("非机动车!");
}
}
}
追问我不懂为什么,结果是这个我知道
追答1、NewVechicle tong = new NewVechicle();是调用NewVechicle的构造函数来实例化tong对象,但由于NewVechicle是派生类,首先会调用执行父类的默认构造函数,因此Speed的默认值是10,因此会首先输出“非机动车!”。
2、tong.Speed = 30;给属性Speed赋值,调用属性的set访问器,因此会输出“禁止驶入”。
热心网友
时间:2023-10-04 01:40
可真是个好学生了,我的目标60即可。哈哈。我给你解释一下。
当new一个对象的时候, new NewVehicle()会去执行他的构造函数,构造函数也就是和类名相同的那个函数,用来对类里边的一些属性或者字段初始化,也就是赋值,new的过程中肯定去执行public NewVehicle()这个构造函数去了,然后去判断Speed,而Speed又怎么拿到呢,因为NewVehicle继承了父类的字段speed,所以,此时speed=10,Speed通过get方法就可以拿到值,所以Speed=speed=10;继续执行会输出非机动车,然后你去给Speed赋值为30,给Speed赋值会调用Speed属性的set方法,所以又跑到上边执行了,输出禁止驶入。
1:你要知道构造函数和类名相同,实在new一个实力对象是被触发的。
2:懂得字段和属性的区别,字段一般小写,属性大小,speed为字段,Speed为属性,属性说白了也是方法,属性的存在是为了保护字段,对字段的set和get来施加一些*条件,所以设置属性会调用属性set方法,得到会调用get方法。
学霸同志,求采纳~~ 都回答你三个问题了。
热心网友
时间:2023-10-04 01:41
非机动车!禁止驶入
因为他在get的时候return的是speed=10,故而在NEWV中返回的是非机动车
热心网友
时间:2023-10-04 01:41
非机动车!禁止驶入追问为什么啊,v派生newv,不该先执行v吗?
热心网友
时间:2023-10-04 01:42
非机动车禁止驶入