C#学习笔记-字段、属性、索引器

news/2024/10/15 14:13:45

字段

  字段表示与对象或者类型(类或结构体)关联的变量(成员变量),为对象或类型存储数据。与对象关联的字段称为“实例字段”,隶属于某个对象。与类型关联的字段称为“静态字段”,表示某一个类型当前的状态。

  静态字段使用 static 关键字修饰。字段在没有显示初始化的情况下会获得其类型的默认值,静态字段在类型被加载时初始化,当一个数据类型被运行环境加载的时候,其静态构造器会被调用且只被调用一次。实例字段在对象创建是被初始化。

class Student
{static public int number; //静态字段private int id;           //实例字段private string name;private int age;public Student()          //实例构造器{name = "null";}static Student()          //静态构造器{number = 0;}
}Console.WriteLine(Student.number);

 属性

  属性用于访问对象或类型的特征的类成员。属性大多数情况下是字段的包装器,由Get/Set方法对发展而来,实际上是一个语法糖。与字段不同的是,属性不表示存储位置。

  属性和字段一般情况下都用来表示实体(对象或类型)的状态,更好的选择是使用属性来供外界访问字段,字段使用 private 或 protected 修饰。

class Student
{private int age;  //字段public int Age    //属性{get { return this.age; }set{if(value < 0 || value > 120) {throw new Exception("Age value has Error!");}this.age = value;  //返回 age 而不是 Age,否则会造成栈溢出}}public int Score { get; set; } //属性的简略声明,功能上和公有字段一样,不受保护,一般用于传递数据
}Student stu = new Student();
stu.Age = 20;
Console.WriteLine(stu.Age);

索引

  索引器使对象能够用和数组相同的方式(使用下标)进行索引。

class Student
{private Dictionary<string, int> scoreDictionary = new Dictionary<string, int>();public int? this[string subject]{get {if (this.scoreDictionary.ContainsKey(subject)){return this.scoreDictionary[subject];}else return null;   }set {//获取索引对应的值可以为空,但是设置时的值不能为空if (value.HasValue == false){throw new Exception("Score can't be null!");}if (this.scoreDictionary.ContainsKey(subject)){this.scoreDictionary[subject] = value.Value;}else{this.scoreDictionary.Add(subject, value.Value);}}}
}class Program
{static void Main(string[] args){Student stu = new Student();Console.WriteLine(stu["Math"]);stu["Math"] = 90;Console.WriteLine(stu["Math"]);}
}

常量

  成员常量是表示常量值的类成员,在编译时将常量标识符替换为对应的值,以提高程序运行时的效率。成员常量隶属于类型而不是对象,没有实例常量。“实例常量”的效果可以由只读字段来实现。“只读”的应用场景:

  1、提高程序可读性和执行效率--常量

  2、防止对象的值被改变--只读字段

  3、向外暴露不允许修改的值--只读属性(静态或非静态),静态只读属性和常量在功能上类似,但是编译器对二者的处理不同。

  4、希望成为常量的值其类型不能被常量声明接受时(类/自定义结构体)--静态只读字段

class Web
{public const Building Location = new Building() { Address = "Address"}; //invalidpublic static readonly Building Location = new Building() { Address = "Address" }; //valid
}class Building
{public string Address {  get; set; }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/26487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

力扣-203. 移除链表元素

1.题目 题目地址(203. 移除链表元素 - 力扣(LeetCode)) https://leetcode.cn/problems/remove-linked-list-elements/ 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2…

网络接收全流程

网卡简介 网卡是一块通信硬件。属于数据链路层。用户可以通过电缆或无线相互连接。每一个网卡都有一个独一无二的MAC地址(48位),它被写在卡上的一块ROM中。IEEE负责为网卡销售商分配唯一的MAC地址。 可以在终端运行sudo lshw -C network来查看网卡型号 可以在/lib/modules/$(u…

《痞子衡嵌入式半月刊》 第 99 期

痞子衡嵌入式半月刊: 第 99 期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《…

Codeforces Round 942 Div.2 题解

ds 这么聪明的。蹭个热度,挽救一下 cnblogs 蒸蒸日上的阅读量。Q: 你是手速狗吗? A: 我觉得我是。2A 因为选的 \(w\) 一定可以让它合法,一次操作可以看作 \(a\) 数组向右平移一位。枚举操作次数后暴力判断即可。 #include <bits/stdc++.h>void work() {int n;std::cin…

linux下调试串口设备

USB转串口常用CH34x芯片,该芯片有linux下的驱动。 在默认情况下,大部分linux发行版都包含了CH34x的驱动,唯一缺点就是版本比较久。 可以先插上开发板, 一般是挂载到/dev/ttyCH341USB0文件下,如果该文件不存在,有两种可能,一种是驱动版本太久,可以下载官方的驱动文件,然…

BSP视频教程第30期:UDS ISO14229统一诊断服务CAN总线专题,常用诊断执行流程精讲,干货分享,图文并茂(2024-04-30)

视频教程汇总帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519 【前言】 1、继前面分享了CANopen和J1939的专题后,这次继续为大家分享UDS专题视频第1期。 2、统一诊断服务(Unified Diagnostic Services,简称UDS)是车用电子的通信协议,是电子控制器EC…

Reverse Card (Hard Version)

事情是这样的,我验了这一场 CF。显然我玩原神玩多了有一个很奇怪的、不能过的算法,哦,当然,在我本机可以过。为了展现自己的智慧糖,我写一下。 出题人是先发给我了一个限制都是 \(n\) 的,因此只有这个。\(n,m\) 改改就是了。 要求 \(1\le a\le n,1\le b\le n\) 满足\(a+b…

IDEA在运行maven打war的时候报错:Cannot access defaults field of Properties

问题描述:解决方案 在pom.xml文件中引入:<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.1</version></plugin></plugins>…