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

【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; // 错误!}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 点晴oa办公系统提效管理+业务协同
  • 极光公布2024年第二季度财报
  • MYSQL -NATURAL JOIN ,单行函数
  • FFmpeg的入门实践系列四(AVS)
  • 给鼠标一个好看的指针特效 鼠标光标如何修改形状?
  • Cisco-综合实验二
  • Linux--NAT,代理服务,内网穿透
  • Python网络爬虫模拟登录与验证解析
  • 为什么要学习 CCRC-PIPP
  • 若依后端 MyBatis改为MyBatis-Plus
  • SIMCom芯讯通A7680C发起HTTP通讯:在UI串口进行模拟;代码调用API操作
  • 使用智谱AI大模型翻译视频字幕
  • 干货 | NXP NCF3321 卡保护应用阈值修改讲解
  • 【团队建设】前端编码规范
  • 示波器常识概述及简介
  • 【RocksDB】TransactionDB源码分析
  • 77. Combinations
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • avalon2.2的VM生成过程
  • CSS实用技巧
  • ECMAScript入门(七)--Module语法
  • express + mock 让前后台并行开发
  • React中的“虫洞”——Context
  • Travix是如何部署应用程序到Kubernetes上的
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #{}和${}的区别?
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • (javascript)再说document.body.scrollTop的使用问题
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (九十四)函数和二维数组
  • (四)图像的%2线性拉伸
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .net core 6 redis操作类
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .Net多线程总结
  • .net后端程序发布到nignx上,通过nginx访问
  • /etc/shadow字段详解
  • [ C++ ] STL---stack与queue
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [ABC275A] Find Takahashi 题解
  • [AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
  • [AI Embedchain] 开始使用 - 全栈
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [APUE]进程关系(下)