C# 字段 属性 索引器

  • 字段
    • 声明字段
    • 字段初始化
    • 静态字段
    • 常量字段
    • 只读字段
    • 字段的访问
    • 然而
  • 属性
    • 声明属性
    • 自动实现的属性
    • 只读属性
    • 只写属性
    • 属性的逻辑处理
    • 属性的访问修饰符
    • 属性和字段的区别
    • 属性的用途
    • 总结
  • 索引器
    • 索引器的基本语法
    • 使用索引器
    • 索引器的关键点
      • 语法
      • 参数
      • 访问和设置
      • 异常处理
      • 性能
      • 重载
      • 使用场景
      • 封装
      • 再举个例子
    • 总结

字段

众嗦粥汁,字段又叫成员变量
C#中,字段(Fields)是类的成员,用于存储数据。字段可以是任何数据类型,包括基本数据类型(如 int, double, bool 等)和引用类型(如类、数组等)。字段可以是静态的static(属于类的,而不是类的实例)或实例的(属于类的对象)。

以下是一些关于C#字段的关键点:

声明字段

字段是在类中声明的,并且可以有访问修饰符(如 public, private, protected, internal 等)来指定其可访问性。

public class Person
{public string Name; // 公共字段private int age;    // 私有字段protected bool isStudent; // 受保护的字段,只能在此类及其派生类中访问
}

字段初始化

字段可以在声明时初始化,也可以在构造函数中初始化。

public class Person
{public string Name = "Unknown"; // 字段初始化public int Age { get; set; } // 自动属性,具有默认值0public Person(string name, int age){Name = name;Age = age; // 构造函数中初始化}
}

静态字段

静态字段属于类本身,而不是类的任何特定实例。它们使用 static 关键字声明。

public class School
{public static int StudentCount = 0; // 静态字段public School(){StudentCount++; // 增加学生计数}
}

常量字段

使用 const 关键字声明的字段是常量,它们的值在编译时已知,并且在运行时不能更改。

public class Constants
{public const double Pi = 3.14159; // 常量字段
}

只读字段

只读字段使用 readonly 关键字声明,它们可以在声明时或构造函数中初始化,但之后不能被修改。

public class Product
{public readonly string ProductCode; // 只读字段public Product(string code){ProductCode = code;}
}

字段的访问

字段可以通过对象实例访问(对于实例字段)或直接通过类名访问(对于静态字段)。

Person person = new Person();
person.Name = "Alice"; // 访问实例字段School.StudentCount = 10; // 访问静态字段

字段是类定义中最基本的数据存储单元,它们提供了一种简单的方式来存储和操作数据。

然而

为了封装和数据保护,通常建议使用属性(Properties)而不是直接访问字段。属性提供了一种更灵活的方式来控制对字段的访问,并且可以在访问或设置值时添加额外的逻辑。


属性

C#中,属性(Properties)是一种成员,它们提供了一种访问和设置字段值的方法,同时允许你添加逻辑来验证或处理这些值。属性可以被视为字段的替代品,但它们提供了更多的控制和灵活性。

属性通常包含两个部分:get 访问器和 set 访问器。get 访问器返回属性的值,而 set 访问器设置属性的值。属性可以是只读或只写,也可以是读写的。

以下是一些关于C#属性的关键点:

声明属性

属性使用 getset 块声明,它们定义了如何获取和设置属性值。

public class Person
{private string _name; // 私有字段,用于存储属性值public string Name{get { return _name; }set { _name = value; }}
}

自动实现的属性

C# 允许你使用自动实现的属性,这样编译器会自动生成一个私有字段来存储属性的值。

public class Person
{public string Name { get; set; }
}

只读属性

如果只需要 get 访问器,属性可以是只读的。

public class Person
{public string Name { get; }
}

只写属性

如果只需要 set 访问器,属性可以是只写的。

public class Person
{private string _name;public string Name{set { _name = value; }}
}

属性的逻辑处理

可以在 set 访问器中添加逻辑,比如验证输入值。

public class Product
{private decimal _price;public decimal Price{get { return _price; }set{if (value < 0)throw new ArgumentOutOfRangeException("价格不能为负数。");_price = value;}}
}

属性的访问修饰符

属性的 getset 访问器可以有不同的访问修饰符,以控制它们的可见性。

public class Product
{public decimal Price{private get { return _price; }protected set { _price = value; }}
}

属性和字段的区别

属性允许你控制对数据的访问,而字段是直接的数据存储。属性通常用于封装字段,提供数据验证或逻辑处理。

属性的用途

属性通常用于封装数据,提供数据验证,以及实现数据绑定等。

总结

属性是C#中非常重要的特性,它们提供了一种安全和灵活的方式来访问和修改对象的状态。通过使用属性,你可以隐藏实现细节,同时提供对数据的控制。


索引器

C#中,索引器(Indexers)是一种特殊的属性,它允许你使用数组索引的语法来访问对象的元素。索引器可以有多个参数,这使得它们非常适合用来实现类似字典或数据库表的访问模式。

索引器的基本语法

public class MyClass
{private Dictionary<int, string> _data = new Dictionary<int, string>();// 索引器声明public string this[int index]{get{if (_data.TryGetValue(index, out string value))return value;elsethrow new KeyNotFoundException("索引未找到。");}set{_data[index] = value;}}
}

使用索引器

class Program
{static void Main(){MyClass myObj = new MyClass();// 使用索引器设置元素myObj[1] = "Hello";myObj[2] = "World";// 使用索引器获取元素Console.WriteLine(myObj[1]); // 输出: HelloConsole.WriteLine(myObj[2]); // 输出: Worldtry{// 尝试访问不存在的索引Console.WriteLine(myObj[3]);}catch (KeyNotFoundException ex){Console.WriteLine(ex.Message);}}
}

索引器的关键点

语法

索引器的语法与属性类似,但使用了 this 关键字,后面跟着参数列表。

参数

索引器可以有一个或多个参数,这些参数用于确定要访问或设置的元素。

访问和设置

索引器可以有 getset 访问器,允许你获取和设置元素的值。

异常处理

get 访问器中,如果尝试访问不存在的索引,可以抛出异常,如 KeyNotFoundException

性能

使用索引器可以提供快速的数据访问,特别是当你使用内部数据结构(如字典)来存储元素时。

重载

你可以为同一个类定义多个索引器,只要它们的参数列表不同。

使用场景

索引器非常适合实现类似数组或字典的数据结构,允许用户通过索引来访问和修改数据。

封装

索引器可以封装内部数据结构,隐藏实现细节,只暴露必要的接口给用户。

再举个例子

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace forCode2019 {class Program {static void Main(string[] args) {Demo d = new Demo(3);d[2] = 1;d[1] = d[2] * 5;d[0, 1] = 100;Console.WriteLine(d[1]);Console.ReadKey();}}class Demo {int[] a;public Demo(int size) {a = new int[size];}public int this[int index] {get {return a[index];}set {a[index] = value;}}public int this[int x, int y] {get {return a[x+y];}set {a[x+y] = value;}}}
}

总结

索引器是C#中一个强大的特性,它提供了一种自然和直观的方式来访问和操作对象的元素。通过使用索引器,你可以创建更加灵活和强大的数据结构。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt 实现模拟实际物体带速度的移动(水平、垂直、斜角度)——————附带完整代码

文章目录 0 效果1 原理1.1 图片旋转1.2 物体带速度移动 2 完整实现2.1 将车辆按钮封装为一个类&#xff1a;2.2 调用方法 3 完整代码参考 0 效果 实现后的效果如下 可以显示属性&#xff08;继承自QToolButton&#xff09;: 鼠标悬浮显示文字 按钮显示文字 1 原理 类继承…

Folx软件安装教程及最新版下载

简介&#xff1a; Folx Pro是一款适合Mac的专业下载工具也是一款BT下载器&#xff0c;Folx中文版有一个支持Retina显示的现代界面&#xff0c;提供独特的系统排序、存储下载内容与预览下载文件。Folx中文官网提供Folx教程、激活码、下载。 安 装 包 获 取 地 址&#xff1a; …

远程连接管理服务SHH

1.了解服务端和客户端 服务端&#xff1a;提供服务 客户端&#xff1a;享受服务 思考: 我们通过网络是如何找到我们想要访问的服务的? IP(提供服务的服务器)Port(找到相应的服务) 2.了解端口号的设定 说明:端口号只有整数&#xff0c;范围是从0 到65535 1&#xff5e;2…

使用RANSAC来拟合直线

RANSAC是“RANdom SAmple Consensus”的缩写&#xff0c;是一种迭代方法&#xff0c;用于数据中估计统计参数或几何模型的算法。它通过给定数据集中随机选择样本并使用样本计算模型&#xff0c;然后测试模型的可能性来工作。如果一个模型通过了足够数量的测试&#xff0c;则认为…

warning LNK4017: DESCRIPTION 语句不支持目标平台;已忽略

文章目录 warning LNK4017: DESCRIPTION 语句不支持目标平台&#xff1b;已忽略概述笔记备注END warning LNK4017: DESCRIPTION 语句不支持目标平台&#xff1b;已忽略 概述 基于ATL的COM DLL导出函数&#xff0c;无法用__declspec(dllexport)直接在函数上标记为导出函数。 只…

【Python】torch_scatter安装报错

torch_cluster&#xff0c;torch_scatter&#xff0c;torch_sparse则在成功安装torch后&#xff0c;使用指令 pip install --no-index torch_scatter -f https://pytorch-geometric.com/whl/torch-1.x.0cu10x.html&#xff08;torch_cluster可直接修改为另外两样&#xff09;进…

Scala网络编程:代理设置与Curl库应用实例

在网络编程的世界里&#xff0c;Scala以其强大的并发模型和函数式编程特性&#xff0c;成为了开发者的得力助手。然而&#xff0c;网络请求往往需要通过代理服务器进行&#xff0c;以满足企业安全策略或访问控制的需求。本文将深入探讨如何在Scala中使用Curl库进行网络编程&…

MySQL第三方图形化工具:DBeaver

操纵数据库的语言&#xff0c;基于功能划分为4类&#xff1a; 数据定义:DDL(Data Definition Language)库的创建删除、表的创建删除等 数据操纵:DML(Data ManipulationLanguage)新增数据、删除数据、修改数据等 数据控制:DCL(Data ControlLanguage)新增用户、删除用户、密码…

DAY24 回溯算法part01 77. 组合 216.组合总和III 17.电话号码的字母组合

理论基础 #什么是回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 在二叉树系列中&#xff0c;我们已经不止一次&#xff0c;提到了回溯&#xff0c;例如二叉树&#xff1a;以为使用了递归&#xff0c;其实还隐藏着回溯 (opens new window)。 回溯是递…

【靶场搭建】-02- 搭建OWASP靶机

1.OWASP靶机介绍 相比较其他靶机&#xff0c;OWASP提供的环境更多&#xff0c;且包含了许多其他靶机的环境&#xff0c;属于性价比比较高的靶机了。 2.下载OWASP 访问以下地址进行下载&#xff1a; https://sourceforge.net/projects/owaspbwa/ 因为OWASP是虚拟机文件&…

玩具机器人脚本适合场景

玩具机器人脚本作为一个模拟的玩具机器人脚本&#xff0c;适合以下场合&#xff1a; 1.教育和学习&#xff1a;对于初学者和编程爱好者来说&#xff0c;这个脚本是一个很好的学习工具&#xff0c;可以帮助他们理解如何编写和执行简单的控制逻辑。 2.在计算机科学、机器人技术或…

函数(上)(C语言)

函数(上&#xff09; 一. 函数的概念二. 函数的使用1. 库函数和自定义函数(1) 库函数(2) 自定义函数的形式 2. 形参和实参3. return语句4. 数组做函数参数 一. 函数的概念 数学中我们其实就见过函数的概念&#xff0c;比如&#xff1a;一次函数ykxb&#xff0c;k和b都是常数&a…

跻身中国市场前三,联想服务器的“智变”与“质变”

IDC发布的《2024年第一季度中国x86服务器市场报告》显示&#xff0c;联想服务销售额同比增长200.2%&#xff0c;在前十厂商中同比增速第一&#xff0c;并跻身中国市场前三&#xff0c;迈入算力基础设施“第一阵营”。 十年砺剑联想梦&#xff0c;三甲登榜领风骚。探究联想服务器…

【机器学习】机器学习重要分支——强化学习:从理论到实践

文章目录 强化学习&#xff1a;从理论到实践引言第一章 强化学习的基本概念1.1 什么是强化学习1.2 强化学习的基本组成部分1.3 马尔可夫决策过程 第二章 强化学习的核心算法2.1 Q学习2.2 深度Q网络&#xff08;DQN&#xff09;2.3 策略梯度方法 第三章 强化学习的应用实例3.1 游…

【C语言】解决C语言报错:Format String Vulnerability

文章目录 简介什么是Format String VulnerabilityFormat String Vulnerability的常见原因如何检测和调试Format String Vulnerability解决Format String Vulnerability的最佳实践详细实例解析示例1&#xff1a;直接使用不受信任的输入作为格式化字符串示例2&#xff1a;未验证格…

1949年到2021年中国历年稻谷产量统计报告

数据介绍 数据来源于国家统计局&#xff0c;为1949年到2021年我国每年的稻谷产量数据。 2021年&#xff0c;我国稻谷产量为21284.24万吨&#xff0c;比上年增长0.5%。 数据统计单位为&#xff1a;万吨 我国稻谷产量有多少&#xff1f; 2021年&#xff0c;我国稻谷产量为2128…

springboot与flowable(12):网关服务(包容网关)

一、绘制流程图 包容网关可以看作是排他网关和并行网关的结合体。和排他网关一样&#xff0c;可以在外出顺序流上定义条件&#xff0c;包容网关会解析它们。但是主要的区别是包容网关可以选择多余一条顺序流&#xff0c;这和并行网关一样。包容网关的功能是基于进入和外出顺序流…

3d渲染的类型,渲染100邀请码1a12

3D渲染有不同的类型和方法&#xff0c;它们各有各的优缺点和适用场景&#xff0c;这里我们简单介绍下。 1、离线渲染 离线渲染也被称作预渲染&#xff0c;是指在不考虑时间限制的情况下&#xff0c;生成高质量二维图像或视频的方法。离线渲染通常用于电影、广告、设计等非交互…

Java常见线上问题以及解决方案

作为一名Java开发者&#xff0c;在工作中遇到各种线上问题是不可避免的。以下是一些常见的问题及其解决方案&#xff1a; 问题1&#xff1a;内存泄漏 场景 某个线上服务运行一段时间后&#xff0c;频繁出现 OutOfMemoryError&#xff0c;导致服务崩溃。 解决方案 分析堆内存…

回归预测 | Matlab实现NGO-HKELM北方苍鹰算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现NGO-HKELM北方苍鹰算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现NGO-HKELM北方苍鹰算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现NGO-HKELM北方苍鹰算法优化混合核极限…