.Net Framework 4/C# 属性和方法

news2025/6/8 15:22:20

一、属性的概述

        属性是对实体特征的抽象,用于提供对类或对象的访问,C# 中的属性具有访问器,这些访问器指定在它们的值被读取或写入时需要执行的语句,因此属性提供了一种机制,用于把读取和写入对象的某些特征与一些操作关联起来。

        属性的声明格式如下:

【访问修饰符】 【类型】 【属性名】
{
    get {get 访问器体}
    set {set 访问器体}
}

        访问修饰符:指定属性的访问级别;类型:指定属性的类型,可以是任何预定义或自定义类型;属性名:一种标识符,而且一般属性名的第一个字母通常大写;

        get 访问器:相当于一个具有属性类型返回值的无参数方法,除了作为赋值的目标外,当在表达式中引用属性时,它将调用该属性的 get 访问器获取属性的值,get 访问器体需要用 return 语句来返回,并且所有的 return 语句都必须返回一个可隐式转换为属性类型的表达式;

        set 访问器:相当于一个具有单个属性类型值参数和 void 返回类型的方法,set 访问器的隐式参数始终命名为 value,当一个属性作为赋值的目标被引用时,就会调用 set 访问器,所传递的参数将提供新值,由于 set 访问器存在隐式的 value 参数,因此在 set 访问器中不能自定义名称为 value 的局部变量或常量;

        属性可以分为以下几种:

  • 可读可写属性:包含 get 访问器和 set 访问器
  • 只写属性:只包含 set 访问器
  • 只读属性:只包含 get 访问器

        属性的主要用途时限制外部类对类中成员的访问权限,定义在类级别上,属性不能作为 ref 参数或 out 参数传递。

        属性以两种形式存在:一种时在公共语言运行库的基类库中定义的属性,另一种时可以创建,并可以向代码中添加附加信息的自定义属性。

        例如有:

public class Date
{
    private int Day = 7;			//定义字段
    public int day                  //星期属性,该属性为可读可写
    {
        get { return Day; }
        set 
        {
            if ((value > 0) && (value < 8))
            {
                Day = value;
            }
        }
    }

}

        C# 支持自动实现的属性,即在属性的 get 访问器和 set 访问器中没有任何逻辑,而且必须同时拥有get 访问器和 set 访问器,例如有:

public int age
{
    get;
    set;
}

二、属性的使用

        程序中调用属性的语法格式如下:

        对象名.属性名

        需要注意的是:

  1. 如果要在其它类中调用自定义属性,必须将自定义属性的访问级别设置为 public;
  2. 如果属性为只读属性,不能在调用时为其赋值,否则产生异常。

        get 访问器是在取值的时候调用的,set 访问器是在赋值的时候调用的,利用属性可以保护字段以及为赋值或者取值添加判断条件(if)。

三、方法

        方法在类或结构中声明,声明时需要指定访问级别、返回值、方法名称及方法参数,方法参数放在括号中,并用逗号隔开,括号中没有内容表示声明的方法没有参数。声明方法的基本格式如下:

【访问修饰符】返回值类型 方法名(参数表列)
{
    //方法的具体实现;
}

        其中,访问修饰符可以是 public、private、protected、internal 中的任何一个,也可以省略,如果省略访问修饰符,则方法的默认访问级别是 private,即只能在该类中访问。

        需要注意的是,一个方法的返回类型和它的形参列表中所引用的各个类型必须至少具有与该方法本身相同的可访问性。

(一)方法的分类

        方法分为静态方法和非静态方法,静态方法需要有 static 修饰。

        静态成员与 C++ 类似,可参考 C++ 的对象和类中的静态成员。但也有所区别,例如有:

namespace ClassName
{
    /*
     * 静态成员的声明
     * 静态函数的声明以及对静态成员和非静态成员的调用
     */
    public class Person
    {
        static int m_A = 10;
        int m_B = 20;
        public static void func(int a, int b)
        {
            Person p = new Person();
            m_A = a;
            p.m_B = b;

            Console.WriteLine("a = " + a);
            Console.WriteLine("b = " + b);
            Console.ReadLine();
        }
    }
    
}

(二)方法的重载

        方法重载是指调用同一方法名,但各方法中参数的数据类型、个数或顺序不同。

(三)Main 方法

        Main 方法的默认访问级别为 private。

(四)方法的参数

        1、ref 参数(引用传递参数)

        由于 C# 没有对指针的操作,因此它在使用引用传递时,也没有取址符号“&”,但提供了一个 ref 参数。ref 参数使形参按引用传递(即使形参是值类型),其效果是在方法中对形参所在的任何修改都将反映在实参中,如果要使用 ref 参数,则方法声明和方法调用都必须显式使用 ref 关键字。

        使用 ref 参数时,需要注意以下几点:

  1. ref 关键字只对跟在它后面的参数有效,而不是应用于整个参数列表;
  2. 在调用 ref 参数之前,一定要进行赋值。
  3. 实参只能是变量,不能是常量或者表达式;
  4. 在调用方法时,必须使用 ref 修饰实参,而且因为是引用参数,所以实参和形参的数据类型必须完全匹配;

        2、out 参数(定义输出函数,引用传递参数)

         out 关键字用来定义输出函数,它会使参数通过引用来传递,不同的是 ref 关键要求变量必须在传递之前进行赋值,而使用 out 关键字定义的参数不用进行赋值即可使用,如果要使用 out 参数,则方法声明和方法调用都必须显式使用 out 关键字。

        3、params 参数

params 参数可以修饰一个一维数组,用来指定在参数类型相同但数量过多或者不确定时所采用的方法参数。当使用 params 参数时,需要注意以下几点:

  1. 只能在一维数组中使用 params 参数;
  2. 一个方法最多只能有一个 params 参数。
  3. 不允许使用 ref 关键字或者 out 关键字修饰 params 参数;

        例如有:

public int AddNum(params int[] x)
{
    int res = 0;
    for (int i = 0; i < x.Length; i++)
    {
        res += x[i];
    }
    return res;
}

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

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

相关文章

ASP.NET Core使用Quartz部署到IIS资源自动被回收解决方案

iis自动回收的原因 回收机制默认配置&#xff0c;间隔时间是1740分钟&#xff0c;意思是&#xff1a;默认情况下每1740分钟(29小时)回收一次&#xff0c;定期检查应用程序池中的工作进程&#xff0c;并终止那些已经存在很长时间或已经使用了太多资源的工作进程 进程模型默认配…

调用.net DLL让CANoe自动识别串口号

1.前言 CANoe9.0用CAPL控制数控电源_canoe读取程控电源电流值-CSDN博客 之前做CAPL通过串口控制数控电源&#xff0c;存在一个缺点&#xff1a;更换电脑需要改串口号 CSDN上有类似的博客&#xff0c;不过要收费&#xff0c;本文根据VID和PID来自动获取串口号&#xff0c;代码…

算法(蓝桥杯学习C/C++版)

up: 溶金落梧桐 溶金落梧桐的个人空间-溶金落梧桐个人主页-哔哩哔哩视频 蓝桥杯三十天冲刺系列 BV18eQkY3EtP 网站&#xff1a; OI Wiki OI Wiki - OI Wiki 注意 比赛时&#xff0c;devc勾选c11&#xff08;必看&#xff09; 必须勾选c11一共有两个方法&#xff0c;任用…

Docker镜像无法拉取问题解决办法

最近再学习RabbitMQ&#xff0c;需要从Docker镜像中拉取rabbitMQ&#xff0c;但是下拉失败 总的来说就是无法和docker镜像远程仓库建立连接 我又去尝试ping docker.io发现根本没有反应&#xff0c;还是无法连接找了许多办法还是没有办法解决&#xff0c;最后才发现是镜像问题&a…

ZephyrOS 嵌入式开发Black Pill V1.2之Debug调试器

版本和环境信息如下&#xff1a; PC平台&#xff1a; Windows 11 专业版 Zephyr开发环境&#xff1a;v4.1.0 Windows 下搭建 Zephyr 开发环境 WeAct BlackPill V1.2开发板&#xff1a; WeAct STM32F411CEU6 BlackPill 核心板 Debug调试器&#xff1a; ST-LINK V2: ST-LINK V2 S…

服务器磁盘空间被Docker容器日志占满处理方法

事发场景&#xff1a; 原本正常的服务停止运行了&#xff0c;查看时MQTT服务链接失败&#xff0c;查看对应的容器服务发现是EMQX镜像停止运行了&#xff0c;重启也是也报错无法正常运行&#xff0c;报错如下图&#xff1a; 报错日志中连续出现两个"no space left on devi…

c++学习-this指针

1.基本概念 非静态成员函数都会默认传递this指针&#xff08;静态成员函数属于类本身&#xff0c;不属于某个实例对象&#xff09;&#xff0c;方便访问对象对类成员变量和 成员函数。 2.基本使用 编译器实际处理类成员函数&#xff0c;this是第一个隐藏的参数&#xff0c;类…

交易所系统攻坚:高并发撮合引擎与合规化金融架构设计

交易所系统攻坚&#xff1a;高并发撮合引擎与合规化金融架构设计 ——2025年数字资产交易平台的性能与合规双轮驱动 一、高并发撮合引擎&#xff1a;从微秒级延迟到百万TPS 核心架构设计 订单簿优化&#xff1a;数据结构创新&#xff1a;基于红黑树与链表混合存储&#xff0c…

OpenCV计算机视觉实战(10)——形态学操作详解

OpenCV计算机视觉实战&#xff08;10&#xff09;——形态学操作详解 0. 前言1. 腐蚀与膨胀1.1 为什么要做腐蚀与膨胀1.2 OpenCV 实现 2. 开运算与闭运算2.1 开运算与闭运算原理2.2 OpenCV 实现 3. 形态学梯度与骨架提取3.1 形态学梯度3.2 骨架提取 小结系列链接 0. 前言 形态…

[论文阅读] 人工智能 | 利用负信号蒸馏:用REDI框架提升LLM推理能力

【论文速读】利用负信号蒸馏&#xff1a;用REDI框架提升LLM推理能力 论文信息 arXiv:2505.24850 cs.LG cs.AI cs.CL Harnessing Negative Signals: Reinforcement Distillation from Teacher Data for LLM Reasoning Authors: Shuyao Xu, Cheng Peng, Jiangxuan Long, Weidi…

基于 NXP + FPGA+Debian 高可靠性工业控制器解决方案

在工业系统开发中&#xff0c;**“稳定”**往往比“先进”更重要。设备一旦部署&#xff0c;生命周期动辄 5~10 年&#xff0c;系统重启或异常恢复成本高昂。 这时候&#xff0c;一套“值得托付”的软硬件组合&#xff0c;就显得尤为关键。 ✅ NXP —— 提供稳定、长期供货的工…

垂起固定翼无人机应用及技术分析

一、主要应用行业 1. 能源基础设施巡检 电力巡检&#xff1a;适用于超高压输电线路通道的快速巡查&#xff0c;实时回传数据提升智能运检效率。 油田管道监测&#xff1a;利用长航时特性&#xff08;1.5-2小时&#xff09;对大范围管道进行隐患排查&#xff0c;减少人力巡…

vite配置@别名,以及如何让IDE智能提示路经

1.配置路径(vite.config.js) // vite.config.js import { defineConfig } from "vite"; import vue from "vitejs/plugin-vue"; import path from "path";// https://vite.dev/config/ export default defineConfig({server: {port: 8080,},plu…

【Linux】LInux下第一个程序:进度条

前言&#xff1a; 在前面的文章中我们学习了LInux的基础指令 【Linux】初见&#xff0c;基础指令-CSDN博客【Linux】初见&#xff0c;基础指令&#xff08;续&#xff09;-CSDN博客 学习了vim编辑器【Linux】vim编辑器_linux vim insert-CSDN博客 学习了gcc/g【Linux】编译器gc…

RPA+AI:自动化办公机器人开发指南

RPAAI&#xff1a;自动化办公机器人开发指南 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 RPAAI&#xff1a;自动化办公机器人开发指南摘要引言技术融合路径1. 传感器层&#xff1a;多模态数据接入2. 决策层&…

计算矩阵A和B的乘积

根据矩阵乘法规则&#xff0c;编程计算矩阵的乘积。函数fix_prod_ele()是基本方法编写&#xff0c;函数fix_prod_opt()是优化方法编写。 程序代码 #define N 3 #define M 4 typedef int fix_matrix1[N][M]; typedef int fix_matrix2[M][N]; int fix_prod_ele(f…

Houdini POP入门学习05 - 物理属性

接下来随着教程学习碰撞部分&#xff0c;当粒子较为复杂或者下载了一些粒子模板进行修改时&#xff0c;会遇到一些较奇怪问题&#xff0c;如粒子穿透等&#xff0c;这些问题实际上可以通过调节参数解决。 hip资源文件&#xff1a;https://download.csdn.net/download/grayrail…

每日Prompt:双重曝光

提示词 新中式&#xff0c;这幅图像将人体头像轮廓与山水中式建筑融为一体&#xff0c;双重曝光&#xff0c;体现了反思、内心平静以及人与自然相互联系的主题&#xff0c;靛蓝&#xff0c;水墨画&#xff0c;晕染&#xff0c;极简

【LLM】多智能体系统 Why Do Multi-Agent LLM Systems Fail?

note 构建一个成功的 MAS&#xff0c;不仅仅是提升底层 LLM 的智能那么简单&#xff0c;它更像是在构建一个组织。如果组织结构、沟通协议、权责分配、质量控制流程设计不当&#xff0c;即使每个成员&#xff08;智能体&#xff09;都很“聪明”&#xff0c;整个系统也可能像一…

CSS 定位:原理 + 场景 + 示例全解析

一. 什么是CSS定位? CSS中的position属性用于设置元素的定位方式,它决定了元素在页面中的"定位行为" 为什么需要定位? 常规布局(如 display: block)适用于主结构 定位适用于浮动按钮,弹出层,粘性标题等场景帮助我们精确控制元素在页面中的位置 二. 定位类型全…