当前位置: 首页 > article >正文

【C#】字段

C# 类具有哪些成员?

字段

1.什么是字段

  • 字段(field)是一种表示与对象或类型(类与结构体)关联的变量
  • 字段是类型的成员,旧称“成员变量”
  • 与对象关联的字段亦称“实例字段”
  • 与类型关联的字段称为“静态字段”,由static修饰

通过一个代码来详细了解实例字段与静态字段的功能。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DateMemberExample
{
    internal class Program
    {
        static void Main(string[] args)
        {
           
            List<Student>stuList= new List<Student>(); //创建一个新的空列表
            for (int i = 0; i < 100; i++)// 循环100次
            {
                Student stu = new Student();// 创建一个新的Student对象
                stu.Age = 24;
                stu.Score = i;
                stuList.Add(stu);// 将新创建的Student对象添加到stuList中
            }
            //计算总年龄和总分数,并根据学生总数计算平均年龄和平均分数。
            int totalAge = 0;
            int totalScore = 0;
            foreach (Student stu in stuList)
            {
                totalAge += stu.Age;
                totalScore += stu.Score;
            }
            Student.AverageAge = totalAge/Student.Amount;
            Student.AverageScore = totalScore/Student.Amount;
            Student.ReportAmount();
            Student.ReportAverageAge ();
            Student.ReportAverageScore();
            Console.ReadLine();

        }
    }

    class Student
    {
        public int Age;
        public int Score;

        public static int AverageAge;
        public static int AverageScore;
        public static int Amount;

        public Student()    //每次实例被创建时,Amount加1
        {
            Student.Amount++;
        }
        public static void ReportAmount()
        {
            Console.WriteLine(Student.Amount);
        }
        public static void ReportAverageAge()
        {
            Console.WriteLine(Student.AverageAge);
        }
        public static void ReportAverageScore()
        {
            Console.WriteLine(Student.AverageScore);
        }

    }
}

代码分析:

  • 定义了两个实例字段:AgeScore
  • 定义了三个静态字段:AverageAgeAverageScoreAmount
  • 定义了一个无参数构造函数,每次创建新的Student实例时,Amount字段递增。
  • 定义了三个静态方法:ReportAmountReportAverageAgeReportAverageScore,分别用于报告学生总数、平均年龄和平均分数。


2.字段的声明

  • 尽管字段声明带有分号,但它不是语句
  • 字段的名字一定是名词

最常用的声明字段的格式是:访问级别+数据类型+变量名   或者  访问级别+ static + 数据类型+变量名。如上面的代码中:

public int Age;//最好初始化

public static int AverageAge;


3.字段的初始值

  • 无显式初始化时,字段获得其类型的默认值,所以字段“永远都不会未被初始化”
  • 实例字段初始化的时机 -- 对象创建时
  • 静态字段初始化的时机 -- 类型第一次被加载(load)时

在C#中,静态构造器主要用于初始化类的静态字段,并且在整个应用程序的生命周期中只执行一次。如上面的代码中;

static Student()    //静态构造器:对静态字段初始化,且只执行一次
{
    Student.Amount = 100;
}

//与以下的代码得到的结果一样

public Student()    //构造函数(实例构造器):每次实例被创建时,Amount加1
{
    this.Age = 0;//忽略该代码,最好在声明字段时就赋予初始值
    Student.Amount++;
}

注意:创建实例只读字段,只有在创建实例时有一次修改的机会

using System;

class Student
{
    public readonly int ID; // 声明只读字段,不能修改

    // 构造函数
    public Student(int id)
    {
        ID = id; // 在创建实例时,可以有一次机会设定ID
    }

    public void DisplayID()
    {
        Console.WriteLine("Student ID: " + ID);
    }
}

class Program
{
    static void Main()
    {
        Student stu1 = new Student(1); // 在创建实例时这样写
        stu1.DisplayID(); // 则实例stu1的ID是1

        // 下面的代码会导致编译错误,因为ID是readonly的
        // stu1.ID = 2; // 错误!
    }
}


http://www.kler.cn/a/287952.html

相关文章:

  • Hadoop生态圈框架部署(六)- HBase完全分布式部署
  • Docker和VMWare有什么不同
  • thinkphp6配置多应用项目及多域名访问路由app配置
  • react 中 useCallback Hook 作用
  • kafka消费者出现频繁Rebalance
  • 计算机网络HTTP——针对实习面试
  • 在麒麟系统安装php7.4中遇到的问题
  • uniapp微信小程序3D XR-FRAME
  • 机器学习之监督学习(二)逻辑回归(二元分类问题)
  • 【ESP32】mqtt 发送和接收
  • 半导体是什么?
  • Spark MLlib模型训练—回归算法 Random forest regression
  • 【uniapp重大bug】uni-data-select的localdata改变,也会触发@change方法
  • Unity(2022.3.41LTS) - UI简介,了解
  • 鸿蒙(API 12 Beta3版)【媒体资源使用指导】Media Library Kit媒体文件管理服务
  • PHP高效进销存管理系统智能管理库存销售与采购系统小程序源码
  • Java 实现二叉树展平为链表
  • python打包 exe 提示no module named flask
  • 关于zotero无法识别拖入的pdf和caj的题录信息
  • 安全随机数生成指南
  • 38次8.28(docker03:容器网络,主从镜像)
  • 23种设计模式之代理模式
  • 如何写接口自动化测试断言?
  • SpringBoot 数据访问-jpa
  • 【CSS】如何写渐变色文字并且有打光效果
  • 嵌入式系统基础知识介绍