C#属性介绍

C# 属性(Property)‌详解 在 C# 中,‌属性(Property)‌ 是类或结构体中的成员,用于封装对私有字段(称为 ‌backing field‌)的访问,提供更灵活和安全的数据操作方式。属性通过 get 和 set 访问器控制对数据的读写,是面向对象编程中封装思想的核心实践。 阅读详情

一、简要介绍

属性是代表类的实例或者类中的一个数据项的成员。
属性是字段和方法的交集,指的是一组两个匹配的访问器方法。
下面是属性的基本形式

public 返回类型 标识符{
    set 访问器为属性赋值;
    get 访问器为属性获取值;
}

属性包含两个代码块,分别以get和set关键字开头。

  • get块包含读取属性时候执行的语句
  • set块包含在向属性写入时执行的语句。

set访问器和get访问器的特点如下:

  • set访问器
    1. 拥有一个单独的、隐式的参数value,其类型与属性的相同
    2. set访问器返回类型为void
  • get访问器
    1. 没有参数
    2. 拥有一个与属性类型相同的返回值。

public 这样的修饰符是可选的,可以选择私有的,这样就不可以在类外直接访问 set 和 get 访问器

通常将类中的字段声明private以封装该字段, 然后声明一个public的属性来控制从类的外部对该字段的访问。

与属性关联的字段称为后备字段。

一般习惯把私有方法和字段以小写字母开头,公共方法和字段以大写字母开头。

使用属性和使用字段是一样的语法

  • 从属性取值时,编译器自动将字段风格的代码转换成对属性的get访问器的调用。
  • 向属性赋值时,编译器自动将字段风格的代码转换成对该属性的set访问器的调用。

二、详细介绍

2.1 例子

using System;

namespace PropertyDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            PropertyDemo propertyDemo = new PropertyDemo();
            propertyDemo.Name = "yyrwkk";
            Console.WriteLine(propertyDemo.Name);

            Console.ReadKey();
        }
    }

    public class PropertyDemo
    {
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }
}

可以简化语句

public string Name {
    get => name;
    set => name = value;
}

2.2 属性和字段的比较

  1. 属性本质是方法而非字段。
  2. 只有在结构或类初始化好之后,才能通过该结构或类的属性赋值。
  3. 不能将属性作为ref或out参数传给方法,因为属性并不真正执行一个内存位置,它指向的是一个访问器方法。
  4. 属性最多只能包含一个get和一个set访问器,不能包含其他方法、字段和属性。
  5. get和set访问器不能获取任何参数。要赋的值会通过内建的、隐藏的value变量自动传给set访问器
  6. 不能声明const属性

属性跟字段的相同点

  • 都是命名的实例成员
  • 都有类型
  • 都可以被赋值和读取

属性和字段的不同点

  • 属性实际上是一个成员函数
  • 不为数据存储分配内存
  • 属性可以只读或者只写。

2.3 自动实现属性

允许只声明属性而不声明后备字段,编译器会创建隐藏的后备字段,并且自动挂接到get或者set访问器上。

自动实现属性的要点:

  1. 不声明后备字段,编译器根据属性的类型分配存储。
  2. 不能提供访问器的方法体。
  3. 自动实现的属性本身会自动分配内存。
  4. 可以创建只读自动属性,但是不能创建只写自动属性。
using System;

namespace PropertyDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            PropertyDemo propertyDemo = new PropertyDemo();
            propertyDemo.Name = "yyrwkk";
            Console.WriteLine(propertyDemo.Name);

            Console.ReadKey();

        }
    }

    public class PropertyDemo
    {
        //private string name;

        public string Name{get;set;}
    }
}

2.4 静态属性

属性可以声明为static,静态属性的访问器和所有静态成员一样。

  • 不能访问类的实例成员,但是可以访问类的静态成员
  • 当从类的外部访问时,必需使用类名进行引用。
using System;

namespace PropertyDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            PropertyDemo.Name = "yyrwkk";
            Console.WriteLine(PropertyDemo.Name);

            Console.ReadKey();
        }
    }

    public class PropertyDemo
    {
        //private string name;

        public static string Name {get;set;}
    }
}

2.5 只读/只写属性

可声明只含get访问器的属性,这称为只读属性,无法修改。

public string Name{
    get => name;
}

声明只含set访问器的属性,称为只写属性,无法读取。

public string Name {
    set => Name = value;
}

只写属性适用于对密码这样的数据进行保护。

2.6 属性可访问性

声明属性时可以指定可访问性
在属性声明中,可以为set和get访问器单独指定可访问性,从而覆盖属性的可访问性

class PropertyDemo{
    private string name;
    
    public string Name {
       get => name;
       private set => name = value;
    }
}

Name的get访问器就是public的,而Name的set访问器就是private的

2.7 接口声明属性

在接口中可以声明属性

interface Position{
    int X {get;set;}
    int Y {get;set;}
}

实现接口的任何类或者结构都必须实现X和Y属性。
接口中的属性不能指定访问修饰符。

2.8 使用初始化器初始化属性

使用属性初始化对象

using System;

namespace PropertyDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            PropertyDemo propertyDemo = new PropertyDemo() { Age=19,Name="yyrwkk" };
            Console.WriteLine(propertyDemo.Name);

            Console.ReadKey();
        }
    }

    public class PropertyDemo
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }
}

调用对象初始化器,C#编译器会自动生成代码来调用默认构造器,然后调用每个具名属性的set访问器,把它们初始化成指定值。

还可以使用自定义的构造函数

using System;

namespace PropertyDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            PropertyDemo propertyDemo = new PropertyDemo(175) { Age=19,Name="yyrwkk" };
            Console.WriteLine(propertyDemo.Name);

            Console.ReadKey();
        }
    }

    public class PropertyDemo
    {
        private int height;
        public int Age { get; set; }
        public string Name { get; set; }

        public PropertyDemo(int height)
        {
            this.height = height;
        }
    }
}
C#【高级篇】C# 属性(Property) 属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。 类或结构中的成员变量或方法称为 域(Field)。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。它们使用 访问器(accessors) 让私有域的值可被读写或操作。 属性(Property)不会确定存储位置。相反,它们具有可读写或计算它们值的 访问器(accessors)。 例如,有一个名为 Student 的类,带有 age、name 和 co 阅读详情

相关推荐

C# 属性

属性通常由一个 getter 和一个 setter 方法组成,用于读取和写入属性的值。在这个例子中,Name属性提供了对私有字段_name的访问。get方法用于获取属性的值,set方法用于设置属性的值。属性是 C# 中非常重要的一个概念,它们提供了一种灵活的方式来控制对类的字段的访问,同时还可以添加额外的逻辑。通过合理地使用属性,可以提高代码的安全性、可维护性和可读性。在定义属性时,需要根据实际需求选择合适的访问修饰符、验证逻辑和计算方式,以确保属性的正确性和有效性。

2401_83367969的博客 1735

【C#进阶】C# 属性

关于编程语言 C# 属性的介绍。

好学若饥,谦卑若愚。 7345

HyperLynx VX2.5 实战:5分钟搞定LPDDR4X内存的批量仿真与报告分析

本文详细介绍了如何使用HyperLynx VX2.5进行LPDDR4X内存的批量仿真与报告分析,通过智能网络分组和并行计算技术,5分钟内即可完成全流程验证。文章涵盖工程准备、批量仿真配置、报告解析及典型问题解决方案,帮助工程师高效提升PCB仿真效率,确保移动设备内存接口的稳定性与性能。

weixin_42683394的博客 400

C#中的属性和方法详解

属性和方法是C#程序中的两个重要组成部分,其中,属性提供灵活的机制来读取、编写或计算私有字段的值,而方法则以一部分代码构成代码块的形式存在,用来实现特定的功能。一、属性属性提供功能强大的方法以将声明信息与C#代码(类型、方法、属性等)相关联,一旦属性与程序实体关联,即可使用名为反射的技术对属性进行查询。属性是一种用于访问对象或类的特性的成员,它可以表示字体的大小、窗体的标题和客户的名称等内容。属性有访问器,这些访问器指定在它们的值被读取或写入时需要执行的语句。

wenchm的博客 4196

五、2K0300 久久派开发板的GPIO控制与Shell脚本自动化实战

本文详细介绍了基于龙芯2K0300处理器的久久派开发板的GPIO控制方法,通过sysfs文件系统实现LED控制和传感器读取。重点讲解了Shell脚本自动化实战,包括LED闪烁、流水灯效果和传感器数据采集,为物联网项目开发提供完整解决方案。

silver的专栏 686

【GNSS测试技术(一)】GNSS基础原理介绍

GNSS(全球卫星导航系统)是一种基于卫星信号的定位技术,通过使用分布在地球轨道上的卫星,为用户提供全球范围内的定位、导航和授时服务。

新猿异码的博客 5750

C# 属性的反射介绍

C# 属性的反射为开发者提供了一种强大的工具,使得代码能够在运行时动态地检查和操作对象的属性。通过反射,我们可以实现很多灵活的功能,如动态配置、序列化和反序列化以及插件扩展机制等。然而,反射也会带来一定的性能开销,因为它涉及到在运行时解析类型和成员信息,所以在使用反射时需要权衡利弊,根据具体的应用场景合理使用。希望通过本文的介绍,你对 C# 属性的反射有了更深入的理解,并能在实际开发中灵活运用这一强大的特性。

zsnandzmn的博客 1568

win11重装系统简易教程-小白也可以上手!

本文介绍一下win11系统重装的各个步骤,也作为记录供自己后面查看。附上我之前参考的一位知乎大神写的重装win10系统文章的地址本文用到的工具全部是,不需要下载第三方镜像文件(不是说这个不好,只是第三方的软件或镜像文件网上非常多,琳琅满目,小白需要筛选甄别,直接用官方的就比较省心,大神请自便~)

Sddqa的博客 1万+

C#常用控件属性及方法介绍

C#常用控件属性及方法介绍                                               目录 1、窗体(Form) 2、Label (标签)控件 3、TextBox(文本框)控件 4、RichTextBox控件 5、NumericUpDown控件 6、Button(按钮)控件 7、GroupBox(分组框)控件

神秘少年的博客 1709

利用makehumancommunity导入人体模型到COMSOL里(需要solidwork)

#makehumancommunity #solidwork #COMSOL

qq_41227634的博客 2158

Origin画图——获取论文图中数据

有时候需要已发表论文的图的数据,这里使用Origin软件取值,并且可以实现对图形再次画图。 Step 1. 打开origin软件,点击工具,图形数字化工具。 Step 2. 打开要获取数据的图片。拉动红蓝坐标,与图的坐标轴所贴合。 Step 3. 打开要获取数据的图片。拉动红蓝坐标,与图的坐标轴所贴合。 Step 3. 设置参数横轴起始坐标为300-900,纵轴为1.8-2.6. Step 4. 点击第五个手动取点,取出图中数据点。 Step 5. 依次对原图进行取点。点击项目资源查看图。

qq_42278015的博客 5182

C#中属性的简单介绍

C#属性的修饰符property-modifiers有:   ●new ●public ●protected ●internal ●private ●static ●virtual ●sealed ●override ●abstract   以上修饰符中,static,virtual,override和abstract修饰符不能同时使用。   属性的访问声明acces

学习也休闲 1295

嵌入式RTOS实战:uC/OS-III最新版移植指南(附项目源码)

本文提供uC/OS-III实时操作系统的完整移植指南,涵盖源码配置、工程搭建到任务调度的全流程。针对移植中的常见编译错误,给出关键修改方案(如中断重定义、配置使能等),附已验证的工程源码,通过LED任务实验验证稳定性,帮助开发者高效完成移植。适合嵌入式工程师及RTOS学习者参考。

Bit_Dong的博客 2471

C#常用控件及其常用属性的介绍

C#控件属性: 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 (2) WindowState属性: 用来获取或设置窗体的窗口状态。 取值有三种: Normal (窗体正常显示)、 Minimized (窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示)。 (3)StartPosition属性:

chinmusam的专栏 4415

Jetson 平台编译安装 FFmpeg 7.1(支持 Nvmpi + SRT + x265)

摘要: 本文详细介绍了在NVIDIA Jetson平台上编译FFmpeg 7.1并集成关键功能的全过程。通过补丁方式加入Nvmpi实现硬件加速支持,同时编译集成x265编码器和SRT低延迟传输协议。步骤涵盖:1)安装x265编码器;2)配置SRT协议支持;3)编译jetson-ffmpeg的Nvmpi接口;4)定制化编译FFmpeg 7.1;5)验证模块集成情况。最终实现支持硬件编解码、高效HEVC压缩和可靠推流的增强版FFmpeg,为Jetson平台的音视频处理提供完整解决方案。

J。 345

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# 属性介绍

属性:get { //读属性代码 } set { //写属性代码 }  public class Person { private string name; public string Name {    get{return  name;}    set{ name=value;} } } 属性可以忽略get或set访问器,但是不能两个都忽略. set访问器包含一个隐藏的参

709

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# 类的属性介绍

本文摘要: 属性是实体特征的抽象描述,通过get和set访问器控制状态信息的访问。与字段不同,属性不能直接访问数据且可添加访问限制。属性声明包含修饰符、类型和名称三部分:修饰符指定访问级别,类型定义属性数据类型,名称遵循大写首字母命名规则。get访问器必须返回属性类型值,set访问器包含隐式value参数并限制同名变量使用。属性通过访问器间接控制数据,而字段可直接访问且无访问限制。

yue008的博客 314

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# Windows窗体应用程序——属性工具栏介绍

用于设置和修改窗体及其控件的各种属性,在属性工具栏中列出了与控件、窗体、按钮、文本框等 UI 元素相关的属性,定制控件的外观、行为和功能。

weixin_46646164的博客 2147

C#基本控件属性介绍全集

C#控件基本1 第一大内容窗体: 一、控制标题栏 Text - 控制标题栏的文字 Icon - 控制标题栏的图标 MaximizeBox - 窗体最大化 MinimizeBox  -窗体最小化 ControlBox - 所有的最大化、最小化、关闭按钮   二、控制背景 BackColor - 控制背景色 BackgroundImage - 背景图 BackgroundIma...

t15032286291的博客 6870

gridView常用属性和技巧介绍 C#

原文地址:C#" style="text-decoration:none; color:rgb(99,64,27)">gridView常用属性和技巧介绍 C#作者:尘世本色 本文系在网上找的存在电脑里的资料但是是哪个大神的作品就不知道了。但是对刚接触griidView的同学来说非常的使用!   1.隐藏最上面的GroupPanel    gridView1.Op

likingsn的技术专栏 2889

C#关于域、属性、事件、索引指示器介绍

    为了保护类的实例的各种数据信息,C#提供了两种方法:域和属性。其中,属性实现了良好的数据封装和数据隐藏。1.      域1.1.   声明在C#中,域等价于变量,声明格式如下:attributes field-modifiers type variable-declarators;域的修饰符field-modifiers可以是:l        newl       

ddxkjddx的专栏 899
上一篇: SystemVerilog:always_ff,always_comb,always_latch
下一篇: C#对象初始化器
暴风雨中的白杨
博客等级 码龄6年 1070粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴风雨中的白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值