C#中的属性

这篇具有很好参考价值的文章主要介绍了C#中的属性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

公众号「DotNet学习交流」,分享学习DotNet的点滴。

简介

属性是代表类的实例或类中的一个数据项的成员,使用属性看起来非常像写入或读取一个字段,语法是相同的。

下面的代码展示了名称为D的类的使用,它有一个公有字段和一个公有属性,从用法无法区分它们。

D d = new D();

d.MyField = 7; //给字段赋值
d.MyProperty = 10; //给属性赋值
Console.WriteLine($"{d.MyField} {d.MyProperty}"); //读取字段和属性

与字段类似,属性有如下特征:

1、它是命名的类成员。

2、它有类型。

3、它可以被赋值和读取。

和字段不同的是,属性是一个函数成员。

1、它不为数据存储分配内存。

2、它执行代码。

一个关于属性的简单示例

代码如下:

public class Person
{
   private string name; // 私有字段

   public string Name
  {
       get
      {
           // 这是属性的get访问器,用于获取属性的值
           return name;
      }
       set
      {
           // 这是属性的set访问器,用于设置属性的值
           name = value;
      }
  }
}

这个示例的图示如下:

在这个示例中,Name 属性提供了对 name 字段的访问,但它本身并不存储数据。当您使用 person.Name 读取属性时,实际上调用了属性的get访问器来获取字段的值,而当您使用 person.Name = "John" 设置属性时,实际上调用了属性的set访问器来设置字段的值。

属性声明和访问器

set和get访问器有预定义的语法和语义。可以把set访问器想象成一个方法,带有单一的参数“设置”属性的值,get访问器没有参数并从属性返回一个值。

set访问器的特点

1、有一个单独的、隐式的值参,名称为value,与属性的类型相同。

2、返回类型void。

get访问器的特点

1、没有参数。

2、返回类型与属性类型相同。

属性和关联字段

属性常和字段关联,一种常见的方式是在类中将字段声明为private以封装该字段,并声明一个public属性来控制从类的外部对该字段的访问,和属性关联的字段常被称为后备字段或后备存储。

属性和它们的后备字段有几种命名约定。

一种约定是两个名称使用相同的内容,但字段使用Camel大小写,属性使用Pascal大小写。(Camel大小写风格中,复合词标识符中每个单词的首字母大写,出来第一个单词,其余字母都是小写,Pascal大小写风格中,复合词中每个单词的首字母都是大写。)

另一种约定是属性使用Pascal大小写,字段使用相同标识符的Camel大小写版本,并以下划线开始。

两种约定的示例代码如下:

        // 第一种约定的写法
       private int firstField; // Camel大小写
       public int FirstField   // Pascal大小写
      {
           get { return firstField; }
           set { firstField = value;}
      }

       // 第二种约定的写法
       private int _secondField; // 下划线及Camel大小写
       public int SecondField   // Pascal大小写
      {
           get { return _secondField; }
           set { _secondField = value; }
      }

只读和只写属性

要想不定义属性的某个访问器,可以忽略该访问器的声明。

只有get访问器的属性称为只读属性。只读属性是一种安全的,把一项数据从类或类的实例中传出,而不允许太多访问方法。

只有set访问器的属性称为只写属性。只写属性是一种安全的,把一项数据从类的外部传入类,而不允许太多的访问的方法。

两个访问器至少有一个必须定义,否则编译器会报错,如下图所示:

自动实现属性

因为属性经常被关联到后备字段,C#提供了自动实现属性(automatically implemented property),允许只声明属性而不声明后备字段,编译器会为我们创建隐藏的后备字段,并且自动挂接到get和set访问器上。

自动实现属性的注意点:

1、不声明后备字段,编译器会根据属性的类型分配存储。

2、不能提供访问器的方法体,它们必须被简单地声明为分号。get担当简单的内存读,set担当简单的写。

3、只有通过访问器才能访问后备字段。因为不能用其他的方法访问它,所以实现只读和只写属性没有意义,因此必须同时提供读写访问器。

一个自动实现属性的示例,代码如下:

    public class Person
  {
       public string Name   // 没有声明后备字段
      {
           get; set;        // 访问器的方法体被声明为分号
      }


  }
       internal class Program
  {
       static void Main(string[] args)
      {
           Person person = new Person();
           Console.WriteLine(person.Name); // 想使用规则属性那样使用自动属性
           person.Name = "小王";
           Console.WriteLine(person.Name);
      }
  }

运行结果如下图所示:

参考资料

《C#图解教程(第4版)》——Daniel M. Solis文章来源地址https://www.toymoban.com/news/detail-746899.html

到了这里,关于C#中的属性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里云盘自动每日签到无需部署无需服务器(仅限学习交流使用)

    阿里云盘自动每日签到,无需部署,无需服务器 执行思路:使用金山文档的每日定时任务,执行阿里云盘签到接口。   1、进入金山文档网页版 金山文档官网: https://www.kdocs.cn/ 2、新建一个空表格 点击【效率】-【高级开发】-【AirScript脚本编辑器】   3、点击【创建脚本】

    2024年02月16日
    浏览(43)
  • 基于微信小程序的英语学习交流平台小程序

    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了英语学习交流平台小程序的开发全过程。通过分析英语学习交流平台小程序管理的不足,创建了一个计算机管理英语学习交流平台小程序的方案。文章介绍了英语学习交流

    2024年01月20日
    浏览(39)
  • 案例030:基于微信小程序的英语学习交流平台

    文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 目录 前言 系统展示 管理员模块的实现 用户信息管理 每日打卡管理 学习资源管理

    2024年02月05日
    浏览(45)
  • Java基于微信小程序的英语学习交流小程序

    博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 2022-2024年最全的计算机软件毕业设计选

    2024年02月19日
    浏览(40)
  • 基于Java+vue前后端分离学习交流论坛设计实现(源码+lw+部署文档+讲解等)

    博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟 2022-2024年

    2024年02月12日
    浏览(43)
  • 【单片机学习笔记】上传一整年的自学电子笔记,互相交流,共同进步。

    学习资料来源包括但不限于: 正点原子、太极创客、硬石科技、野火_firege、喵呜实验室、小蜜蜂笔记、鱼C-小甲鱼、普中科技 ...... 我学的是车辆工程专业,去年八月份,加入了学院的创客工作室,在教室里学过相关课程就电工电子和C语言程序设计,学单片机基本靠自学。

    2024年02月16日
    浏览(76)
  • 0003Java安卓程序设计-springboot基于Android的学习生活交流APP

    编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 网络的广泛应用给生活带来了十分的便利。所以把学习生活交流管理与现在网络相结合,利用java技术建设学习生活交流APP,实现学习生活交流的信息化。则对于进一步提高学习生活交流管理发展,丰富学习生活交

    2024年02月05日
    浏览(49)
  • 12.Java程序设计-基于Springboot框架的Android学习生活交流APP设计与实现

    摘要 移动应用在日常生活中扮演着越来越重要的角色,为用户提供了方便的学习和生活交流渠道。本研究旨在设计并实现一款基于Spring Boot框架的Android学习生活交流App,以促进用户之间的信息分享、学术交流和社交互动。 在需求分析阶段,我们明确了App的核心功能需求,包

    2024年02月03日
    浏览(56)
  • 基于微信小程序的英语学习交流平台的设计与实现(论文+源码)_kaic

    英语学习交流平台小程序 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了英语学习交流平台小程序的开发全过程。通过分析英语学习交流平台小程序管理的不足,创建了一个计算机管理英语学习交流平台小程序的

    2024年03月21日
    浏览(82)
  • 基于SpringBoot+Vue+uniapp微信小程序的英语学习交流平台的详细设计和实现

    💗 博主介绍 :✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅 👇🏻 2023-2024年最值得选的微信小程序毕业设

    2024年02月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包