栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

头歌 C# 专题四 类与对象第5节

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

头歌 C# 专题四 类与对象第5节

 

第5关:static静态对象

  • 任务要求
  • 评论28

    任务描述相关知识

    static

    静态变量的声明和使用一个实例特别实例编程要求测试说明


    任务描述

    大学校园内有各种各样的社团,一般每个社团都会不定期举办一些大型活动,活动的时间和地点可能会有所差异。例如某摄影社团2018年上半年活动表:

     
    
      次数统计 时间 地点1 2018-03-22 北京大学2 2018-05-01 中国人民大学3 2018-06-01 清华大学

    本关任务:根据编程要求编写一个大型活动类,要求能够统计举办活动的次数。

    相关知识

    static

    使用static修饰符声明一个静态成员。我们刚学习过类class,类是以对象为基础,而静态变量是与类类型同一级别的类型,不属于任何对象。

    staitc修饰符可用于修饰类、方法、属性、操作符、事件或是构造函数,但不可用来修饰索引、Finalize()(即析构函数)等。

    使用方法如下:

     
    
      static <修饰对象>

    例如,我们使用static修饰类:

     
    
      staitc class Person{//类成员}

    静态变量的声明和使用

    使用static修饰类成员变量将不会被对象实例引用。相反,该成员变量可通过变量类型名称直接使用。 例如:

     
    
      class Person{public static string name; //使用static修饰public int age;}class myCaller {public static void Main() {Person p = new Person();p.age = 20; //此处仅能使用age}}

    以上这段代码,在类myCaller中实例化类Person对象p,该对象无法调用成员变量name。

    使用类名称调用name: 具体如下代码:

     
    
      class Person{public static string name;public int age;}class myCaller {public static void Main() {Person p = new Person();p.age = 20; //此处仅能使用agePerson.name = "Jackie"; //直接使用类型Person调用}}

    由于name为静态变量,所以每一次赋值都会更改name的值,而不是像类Person实例化多个对象的属性值,类成员变量对应的对象属性值可互不相同,例如:

     
    
      class Person{public static string name;public int age;}class myCaller {public static void Main() {Person p1 = new Person(); //创建三个实例Person p2 = new Person();Person p3 = new Person();p1.age = 10; //三个实例互不相同p2.age = 20;p3.age = 30;Person.name = "Jackie"; //共同拥有属性name}}

    在调用类myCaller中实例化三个对象p1、p2、p3,三个对象age属性分别为10、20和30,而name有且仅有一个值"Jackie"。

    实际中,对于静态成员可以这样理解:我们定义一个类employee来表示公司员工,假定employee包含一个方法用来计算员工数量,包含一个属性用来保存员工数量。当我们使用empliyee实例化一个员工对象的时候,员工对象自身和计算、存储员工数量的方法、属性并无太大关联,相对的,该方法、属性更适用于创建一个新的公司company类。因此,在employee类中,该方法和属性被声明为静态类型最为合适。

    我们需要注意:

    使用this无法引用使用static定义的成员变量。如果使用static修饰类,那么这个类的所有成员皆是静态的。类和静态类可以包含静态构造函数,静态的构造函数会在程序启动到实例化类之间调用。

    一个实例

    我们将员工类实现,如下:

     
    
      namespace J5{public class Emlployee {public string name; //员工属性:姓名public Emlployee(string name) {this.name = name;}public static int employeeNum; //非员工属性:员工数量public static void updateEmployeeNum() {employeeNum++;}}public class myCaller {public static void Main(string[] args) {Console.Write("Enter the new employee's name:");string name = Console.ReadLine();Emlployee e = new Emlployee(name);Console.Write("Enter the current number of employee:");string num = Console.ReadLine();Emlployee.employeeNum = Convert.ToInt32(num);//获取并更新员工数量Emlployee.updateEmployeeNum();Console.WriteLine("Name:"+e.name);Console.WriteLine("Number of Employee:"+Emlployee.employeeNum);}}}

    该实例读取一个新员工对象姓名,然后通过函数updateEmployeeNum()对员工数加一更新员工数量,之终显示员工数量的最新状态。此段代码使用键盘输入员工名字及员工数量初始值。

    运行结果如下:

    特别实例

    此段代码显示了静态变量之间赋值过程:

     
    
      namespace J5{class Test {static int x = y;static int y = 4;public static void Main() {Console.WriteLine(x);Console.WriteLine(y);x = 100;Console.WriteLine(x);Console.WriteLine(y);}}}

    其中静态变量x声明的初始值为未定义变量y,运行结果如下:

    结果表明,当变量x未被显示赋值之前,其值是未定义的。

    编程要求

    本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:

    补全大型活动类BigEvent,使用static关键字定义一个int类型静态变量counter,使之随着BigEvent类实例对象的创建而自增。程序运行正常,实际输出与测试中的预期输出相符。

    测试说明

    测试过程:

    平台将编译用户补全后的代码,并根据程序的输出判断程序是否正确。

    以下是测试样例:

    测试输入: 预期输出: 3


    以中有足乐者,不知口体之奉不若人也。 --宋濂 开始你的任务吧,祝你成功!

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace J5
    {
        public class BigEvent
        {
            private string time;
            private string location;
            
            public static int counter=0;
            public BigEvent()
            {
                counter++;
            }
            
        }
    
        public class myCaller
        {
            public static void Main(string[] args)
            {
                BigEvent b1 = new BigEvent();
                BigEvent b2 = new BigEvent();
                BigEvent b3 = new BigEvent();
    
                Console.WriteLine(BigEvent.counter);
            }
        }
    }
    

  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/723585.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号