任务描述
当我们在家里边使用wifi的时候,每台接入wifi的电脑都会被默认分配一个ip地址。例如:
103.67.193.190
也可以手动有限的更改ip地址:
103.67.193.191
103.67.193.192
编写一个设备类,该设备拥有默认ip地址属性,也可通过手动设置初始化为指定ip地址。
相关知识
构造函数和析构函数
构造函数和析构函数用于初始化对象和清理对象。在C#中定义类的时候,通常会有默认的构造函数和析构函数,由编译器自动添加,也可自定义构造函数和析构函数。
构造函数
我们先看一个简单的构造函数,如下:
class Person{
public Person(){
//初始化代码
}
}
由上面你代码可知,构造函数和类名称相同,且没有返回值。在构造函数中对类属性初始化为:
class Person{
string name;
int age;
public Person(){
//初始化代码
name = "Jackie";
age = 20;
}
}
通过构造函数初始化属性值,之后可通过成员函数对属性值进行管理。
上面代码中,构造函数Person()没有参数,将会被视为默认构造函数(编译器不再自动添加)。
也可以给类添加不同的构造函数,方法为提供参数,如下:
class Person{
string name;
int age;
//默认构造函数,无参
public Person(){
//初始化代码
name = "Jackie";
age = 20;
}
//第二个构造函数
public Person(string _name, int _age){
name = _name;
age = _age;
}
}
第二个构造函数通过参数对属性值进行初始化,一般为创建对象的时候手动添加。有参数的构造函数数量几乎不受限制,但需要确保函数签名的不同。
我们使用两种构造函数创建对象,如下:
namespace J2
{
class Person{
string name;
int age;
//默认构造函数,无参
public Person(){
//初始化代码
name = "Jackie";
age = 20;
}
//第二个构造函数
public Person(string _name, int _age){
name = _name;
age = _age;
}
public void saying() {
Console.WriteLine("my name is "+name+", my age is "+age);
}
}
class myCaller {
public static void Main(string[] args) {
Person p1 = new Person(); //使用无参默认构造函数Person();
Person p2 = new Person("Steven", 18); //使用有参构造函数Person(string name, int age)
//输出两个对象属性值
p1.saying();
p2.saying();
}
}
}
此段代码,在类myCaller中调用Person类,并使用两种构造函数构造了两个不同的对象p1和p2,p1对象使用默认构造函数,不带参数:
Person p1 = new Person();
p2对象使用带参数构造函数,将初始值手动添加:
Person p2 = new Person("Steven", 18);
运行结果如下:
my name is Jackie, my aye is 20
my name is Steven, my aye is 18
析构函数
析构函数与构造函数略有不同,还用Person类举例,Person析构函数如下:
class Person{
~Person(){
//析构函数代码
}
}
类Person的析构函数由带有符号~前缀的类名来声明,系统资源具体由函数Finalize()释放,Finalize()由系统自动调用。
Finalize()函数有如下特性:
Finalize()只能用于类中,不能用于结构;
一个类中仅能有一个Finalize();
Finalize()不能被继承或重写;
Finalize()只能被系统自动调用;
Finalize()不能被修改或带参数。
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
编写一个设备类myDevice,该类仅包含一个string类型成员ip
编写myDevice构造函数,使ip初始值为:
103.67.193.190
编写重载构造函数,使能够更改默认ip地址,重载构造函数声明如下:
public myDevice(string _ip);
编写打印属性ip函数showIp(),该函数显示设备类成员
程序正常运行,输出结果与语气输出相同
测试说明
测试过程:
平台将编译用户补全后的代码,并根据程序的输出判断程序是否正确。
以下是测试样例:
测试输入:
预期输出:
103.67.193.190
103.67.193.195
我的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace J2
{
/********** Begin *********/
class myDevice
{
String ip;
public myDevice()
{
ip = "103.67.193.190";
}
public myDevice(string _ip)
{
ip= _ip;
}
public void showIp()
{
Console.WriteLine(ip);
}
}
/********** End *********/
public class myCaller
{
public static void Main(string[] args)
{
myDevice phone = new myDevice();
myDevice computer = new myDevice("103.67.193.195");
phone.showIp();
computer.showIp();
}
}
}
题目链接
链接(点我): 构造函数和析构函数.