当前位置: 首页 > article >正文

【C#】属性的声明

在面向对象程序设计中,属性是访问对象存储数据的首选方式。

一般不要直接公开类的变量成员,即便是get访问器和set访问器并无数据访问规则。


属性的声明

1. 完整声明 

在代码中输入propfull ,并连续按两下tab键

高亮的部分是可以修改的部分,按tab键可以跳转到第二个修改的部分

myVar是被属性包装的字段的名字

MyProperty是属性的名字

对于get访问器和set访问器:

  • get访问器的主要目的是为外部读取提供数据,因此在get访问器的语句块末尾,应包含向外部返回值的return语句
  • set访问器的主要目的是将外部数据写入对象,因此在set访问器中带有一个特殊的关键字value,如果把外部数据看作实参,value就是属性的形式参数

同样的定义一个静态属性Amount:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PropertyExample
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Student.Amount = 100;
                Console.WriteLine(Student.Amount);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }
    }

    class Student
    {
   
        private static int amount;
        public static int Amount
        {
            get { return amount; }
            set 
            { 
                if(value>=0)
                {
                    Student.amount = value;
                }
                else
                {
                    throw new Exception("Amount must greater than 0");
                }
            }
        }

    }
}

分析代码:

  1. 定义了一个私有的静态整型变量 amount
  2. 定义了一个静态属性 Amount,它具有获取器(get)和设置器(set)。
    • 设置器检查传入的 value 是否大于等于 0。如果是,则将 amount 设置为 value;如果不是,则抛出一个异常。
    • 获取器返回私有变量 amount 的值。

2.简略声明

常用来传输数据,不对字段进行保护

在代码中输入prop ,并连续按两下tab键


属性与字段的关系

一般情况下,它们都用于表示实体(对象或类型)的状态
属性大多数情况下是字段的包装器(wrapper)
建议:永远使用属性(而不是字段)来暴露数据,即字段永远都是private或protected的


http://www.kler.cn/news/283967.html

相关文章:

  • Elasticsearch中修改mapping的字段类型该怎么操作
  • Go语言结构快速说明
  • JAVA后端框架--【Mybatis】
  • 【单片机原理及应用】实验:数字秒表显示器
  • ubuntu录屏解决ubuntu下无法播放MP4格式文件的方法
  • 【栈】| 力扣高频题: 基本计算器二
  • 忘掉 Siri 吧:苹果可能会推出拥有自己AI“个性”的机器人设备|TodayAI
  • linux信号处理机制基础(下)
  • 【 WPF 中常用的 `Effect` 类的介绍、使用示例和适用场景】
  • Qt Creator 配置pcl1.14.1
  • 物理机安装Centos后无法连接网络(网线网络)怎么办?-呕心沥血总结版-超简单
  • CSRF漏洞的预防
  • CMake基本语法大全
  • 2024.08.30
  • JVM面试(一)什么是虚拟机?什么是class文件?
  • ASP.NET Core6.0-wwwroot文件夹无法访问解决方法
  • docker基本使用及常见问题
  • github怎么删除项目
  • 使用dom4j.jar包读取xml内的标签等信息
  • 高级java每日一道面试题-2024年8月30日-基础篇-你对泛型了解多少?
  • 私人诊所|基于SprinBoot+vue的私人诊所管理系统(源码+数据库+文档)
  • STM32——看门狗(独立/窗口)
  • python删除一个函数 ast
  • 如何将FMEA整合到组织的质量管理体系中?
  • 百度:未来or现在 顾此失彼?
  • 如何利用智能文档处理技术,搭建供应链金融智能审单系统?
  • 《深入浅出WPF》读书笔记.9Command系统
  • 人工智能的可解释性(XAI) | 使用LIME
  • NeRF笔记
  • 发布app到ios