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

一、属性的概述

        属性是对实体特征的抽象,用于提供对类或对象的访问,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.pswp.cn/diannao/85841.shtml

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

相关文章

asp.net mvc如何简化控制器逻辑

在ASP.NET MVC中&#xff0c;可以通过以下方法简化控制器逻辑&#xff1a; ASP.NET——MVC编程_aspnet mvc-CSDN博客 .NET/ASP.NET MVC Controller 控制器&#xff08;IController控制器的创建过程&#xff09; https://cloud.tencent.com/developer/article/1015115 【转载…

flask功能使用总结和完整示例

Flask 功能使用总结与完整示例 一、Flask 核心功能总结 Flask 是轻量级 Web 框架&#xff0c;核心功能包括&#xff1a; 路由系统&#xff1a;通过 app.route 装饰器定义 URL 与函数的映射。模板引擎&#xff1a;默认使用 Jinja2&#xff0c;支持动态渲染 HTML。请求处理&…

HarmonyOS应用基础阶段- 09、综合案例-仿携程旅行口碑榜

文章目录 携程-口碑榜1、banner 区域1.1 区域部分1.2 口碑榜 Logo1.3 推荐榜单1.4 评分规则1.5 底部 Line 2、选择城市和目的地2.1 区域布局2.2 选择城市2.3 口碑目的地 3、商业选项菜单4、热门项目选项4.1 区域布局4.2 热门标题4.3 选项 5、热门榜标题6、热门景点列表6.1 区域…

中小制造企业转型:低成本国产工业软件替代方案实践

在数字经济浪潮席卷全球的当下&#xff0c;制造业数字化转型已成为企业提升竞争力、实现可持续发展的必由之路。然而&#xff0c;高昂的成本与复杂的技术门槛&#xff0c;却让众多中小制造企业陷入 “不能转、不想转、不会转、不敢转” 的困局。幸运的是&#xff0c;一批具有自…

Kafka 核心架构与消息模型深度解析(二)

案例实战&#xff1a;Kafka 在实际场景中的应用 &#xff08;一&#xff09;案例背景与需求介绍 假设我们正在为一个大型电商平台构建数据处理系统。该电商平台拥有庞大的用户群体&#xff0c;每天会产生海量的订单数据、用户行为数据&#xff08;如浏览、点击、收藏等&#…

【iOS】cache_t分析

前言 之前分析类的结构的时候&#xff0c;有遇到一个cache_t&#xff0c;当时说是用来保存方法缓存的结构&#xff0c;这篇文章来从源码详细介绍一下cache_t 概览cache_t cache_t结构 类在底层的结构如之前所述&#xff0c;存在着cache_t属性&#xff0c;而cache_t的结构如下…

java面试题:List如何排序?内存溢出/OOM怎么回事?如何排查和解决?

List如何排序 List排序可以通过实现Comparable接口并且实现compareTo方法&#xff0c;或者传入comparator去实现排序。 内存溢出/OOM是怎么回事&#xff1f; 内存溢出就是程序在运行的过程中&#xff0c;申请的内存超过了最大内存限制&#xff0c;导致JVM抛出OOM异常&#x…

Python cryptography【密码库】库功能与使用指南

边写代码零食不停口 盼盼麦香鸡味块 、卡乐比&#xff08;Calbee&#xff09;薯条三兄弟 独立小包、好时kisses多口味巧克力糖、老金磨方【黑金系列】黑芝麻丸 边写代码边贴面膜 事业美丽两不误 DR. YS 野森博士【AOUFSE/澳芙雪特证】377专研美白淡斑面膜组合 优惠劵 别光顾写…

第二十四章 流程控制_ if分支

第二十四章 流程控制: if分支和输入 正如许多编程语言一样Shell也有自己的条件分支语句。有时需要根据情况进行相应的处理&#xff0c;因此可以通过条件分支语句实现&#xff0c;本章主要介绍的是if分支语句。 if语句 在Shell中if语句语法格式如下&#xff1a; if commands…

电脑网络重置,找不到原先自家的WIFI,手机还能正常连接并上网

问题排查&#xff1a;1、电脑感觉网络太慢&#xff0c;因此打算点击了网络重置 2、点击提示会删除网络&#xff0c;在五分钟后关机重启 3、从设备管理器设备的无线wifi属性-事件中发现删除记录 4、选择更新驱动程序 5、从列表中选取 6、更改回老驱动版本 备选方案&#…

C语言_预处理详解

1. 预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的 1 __FILE__ //进行编译的源文件 2 __LINE__//文件当前的行号 3 __DATE__ //文件被编译的日期 4 __TIME__//文件被编译的时间 5 __STDC__//如果编译器遵循ANSI…

【QT】使用QT帮助手册找控件样式

选择帮助—》输入stylesheet(小写)—》选择stylesheet—》右侧选择Qt Style Sheets Reference 2.使用CtrlF—》输入要搜索的控件—》点击Customizing QScrollBar 3.显示参考样式表–》即可放入QT-designer的样式表中

SQL知识合集(二):函数篇

TRIM函数 作用&#xff1a;去掉字符串前后的空格 SELECT * FROM your_table_name WHERE TRIM(column_name) ; COALESCE函数 作用&#xff1a;返回其参数中的第一个非 NULL 值。它可以接受多个参数&#xff0c;并从左到右依次评估这些参数&#xff0c;直到找到第一个非 NUL…

Cursor 工具项目构建指南: Uniapp Miniprogram 环境下的 Prompt Rules 约束

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 Cursor 工具项目构建指南: Uniapp Miniprogram 环境下的 Prompt Rules 约束前言项目简…

Java转Go日记(六十):gin其他常用知识

1. 日志文件 package mainimport ("io""os""github.com/gin-gonic/gin" )func main() {gin.DisableConsoleColor()// Logging to a file.f, _ : os.Create("gin.log")gin.DefaultWriter io.MultiWriter(f)// 如果需要同时将日志写入…

cocos单例工厂和自动装配

cocos单例工厂和自动装配 1 单例工厂 1.1 分析 实例字典 原理很简单&#xff0c;只是一个map&#xff0c;确保每个类只保留一个实例&#xff1b; private static _instances new Map<string, any>();获取与存储实例 这边使用的方式是生成一个唯一的id存储在类上&…

django paramiko 跳转登录

在使用Django框架结合Paramiko进行SSH远程操作时&#xff0c;通常涉及到自动化脚本的执行&#xff0c;比如远程服务器上的命令执行、文件传输等。如果你的需求是“跳转登录”&#xff0c;即在登录远程服务器后&#xff0c;再通过该服务器的SSH连接跳转到另一台服务器&#xff0…

《C++初阶之类和对象》【命名空间 + 输入输出 + 缺省参数 + 函数重载】

【命名空间 输入&输出 缺省参数 函数重载】目录 前言&#xff1a;---------------hello world---------------比较C语言和C的第一个程序&#xff1a;hello word ---------------命名空间---------------什么是命名空间&#xff1f;怎么使用命名空间&#xff1f;怎么定义…

[USACO1.5] 八皇后 Checker Challenge Java

import java.util.*;public class Main {// 标记 对角线1&#xff0c;对角线2&#xff0c;所在x轴 是否存在棋子static boolean[] d1 new boolean[100], d2 new boolean[100], d new boolean[100]; static int n, ans 0;static int[] arr new int[14]; // 记录一轮棋子位置…

云服务器Xshell登录拒绝访问排查

根据你的描述&#xff0c;使用Xshell 8登录云服务器时显示“拒绝访问”&#xff0c;可能涉及多个原因。以下结合搜索结果整理出排查和解决方法&#xff0c;按优先级排序&#xff1a; 一、检查基础网络与端口连通性 本地网络与服务器IP是否可达 在本地电脑的CMD中执行 ping 服务…