C#类(一):类和对象--构造函数和析构函数

类和对象--构造函数和析构函数

任务描述

当我们在家里边使用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();
        }
    }
}

题目链接

链接(点我): 构造函数和析构函数.

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值