C# 属性

文章目录

  • 实例属性
  • 静态属性
  • 只读属性:
  • 内部只读属性:
  • 动态计算值的属性
    • 方式一:主动计算
    • 方式二:被动计算

快速生成属性的方法:输入propfull,按两下tab键,然后再按tab键一次修改有底纹的字段,字段myVar的名称改变后,get、set 中会自动更新。
其中: value是上下文关键字,代表用户传过来的值。
默认生成的属性格式比较简单,如下图,实际上为了防止污染字段值,可以在set中对用户传过来的值value进行判断,即丰富 set的代码块。
图1
生成简单属性,仅用来传输数据,即输入 prop,按两下tap键。
在这里插入图片描述

实例属性

using System;

namespace PropAppl
{
    public class Executer
    {
        static void Main(string[] args)
        {
            try
            {
                Person p = new Person();
                p.Age = 1;
                Console.WriteLine(p.Age);
                Person p2 = new Person();
                p2.Age = 100;
                Console.WriteLine(p2.Age);
            }catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }

    class Person
    {
        private int age;

        public int Age
        {
            get { return age; }
            set 
            {
                if (value >= 0 && value <= 90)
                    this.age = value;
                else
                    throw new Exception("Age is error!");
            }
        }

    }
   
}

运行结果:
值正常,即正常输出,否则 异常打印出来。
在这里插入图片描述

静态属性

using System;

namespace PropAppl
{
    public class Executer
    {
        static void Main(string[] args)
        {
            try
            {
               Person.Amount = 100;
                Console.WriteLine(Person.Amount);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }
    }

    class Person
    {
        private static  int amount;

        public static  int Amount
        {
            get { return amount; }
            set 
            {
                if (value >= 0)
                    amount = value;
                else
                    throw new Exception("Amount is error");
            }
        }
    }
   
}

运行结果,输入100.

当 Person.Amount = -100;
在这里插入图片描述

只读属性:

只有get,没有set—很少使用,因为属性的主要目的是通过向外暴露数据而表示对象或者类型的状态 ;

内部只读属性:

即 private set{}

动态计算值的属性

CanWork的值,由Age的值影响,而动态生成,有两种方式。以下展示的两种方法的计算的结果一致。Mian函数中的程序主体也没有发生变化。因为只是改变了内部的实现。
主动计算:设定Age即计算。
被动计算:访问的时候才计算。
具体选择哪种方式,根据属性的调用频率。如果CanWork被调用的很频繁,那就可以选择第一种的主动计算方式,每次设定了年龄值,就将CanWork计算出来。如果Age调用的很频繁,这两种方式设计的就不是很合理了。因为CanWork的大量计算,浪费了计算性能。

方式一:主动计算

using System;

namespace PropAppl
{
    public class Executer
    {
        static void Main(string[] args)
        {
            try
            {
                Person p = new Person();
                p.Age = 10;
                Console.WriteLine(p.CanWork);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }
    }

    class Person
    {
        private int age;

        public int Age
        {
            get { return age; }
            set
            {
                if (value >= 0 && value <= 90)
                    this.age = value;
                else
                    throw new Exception("Age is error!");
            }
        }

        public bool CanWork
        {
            get
            {
                if (this.age >= 16)
                    return true;
                else
                    return false;
            }
        }
    } 
}


在这里插入图片描述

方式二:被动计算

访问的时候才计算

using System;

namespace PropAppl
{
    public class Executer
    {
        static void Main(string[] args)
        {
            try
            {
                Person p = new Person();
                p.Age = 10;
                Console.WriteLine(p.CanWork);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }
    }

    class Person
    {
        private int age;

        public int Age
        {
            get { return age; }
            set
            {
                if (value >= 0 && value <= 90)
                {
                    age = value;
                    this.CaculateCanWork();
                }   
                else
                    throw new Exception("Age is error!");
            }
        }

        private bool canWork;

        public bool CanWork
        {
            get { return canWork; }
            
        }

        public void CaculateCanWork()
        {
            if (this.age >= 16)
                this.canWork = true;
            else
                this.canWork = false;
            
        }
    } 
}


与方式一的运行结果一致。

参考视频:刘铁猛 C# 教程第17讲 字段 属性 索引器 常量

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析

文章目录 一、简介1、BeanFactoryPostProcessor2、BeanPostProcessor 二、BeanFactoryPostProcessor 源码解析1、BeanDefinitionRegistryPostProcessor 接口实现类的处理流程2、BeanFactoryPostProcessor 接口实现类的处理流程3、总结 三、BeanPostProcessor 源码解析 一、简介…

6.7Jmeter5.1,非GUI模式,通过命令行传递线程数

原创文章&#xff0c;谢绝转载。 一、前提 本次做性能测试&#xff0c;需求是需要在Linux下的非GUI模式下执行。但用命令行执行时&#xff0c;线程数需要改变&#xff0c;为了执行方便&#xff0c;不需要每次都在脚本中修改线程数&#xff0c;那么线程数都需要通过参数传递&…

使用docker的常见bug

BUG1&#xff1a;磁盘被占满导致docker无法使用 docker ps 【查看docker能否正常使用】 正常的话会打印下图信息: 不正常的话打印如下图信息&#xff1a; journalctl -u docker 【查看docker无法正常使用的原因】&#xff0c;本次测试中遇到下图bug&#xff0c;意思是/var/l…

Bard:一个可以描述图像的人工智能

Bard 是一个大型语言模型&#xff0c;可以对各种提示和问题进行交流和生成类似人类的文本。它接受了大量的文字和代码训练&#xff0c;可以生成文本、翻译语言、编写不同类型的创意内容&#xff0c;并以信息丰富的方式回答你的问题。 Bard 还可以识别图像。它可以识别图像中的…

libvirt 热迁移流程及参数介绍

01 热迁移基本原理 1.1 热迁移概念 热迁移也叫在线迁移&#xff0c;是指虚拟机在开机状态下&#xff0c;且不影响虚拟机内部业务正常运行的情况下&#xff0c;从一台宿主机迁移到另外一台宿主机上的过程。 1.2 虚拟机数据传输预拷贝和后拷贝 预拷贝(pre-copy)&#xff1a; …

星火认知大模型,让我感受到了国产AI的崛起

文章目录 一、申请和测试代码二、实测GPT4.0和星火认知大模型的对比2.1 测试网站2.2 经典问题提问对比2.3 代码问题提问对比2.4 论文问题对比2.5 评价 一、申请和测试代码 在我之前的一篇文章中&#xff0c;我分享了如何申请星火认知大模型的内测&#xff0c;并提供了一份可以…

python opencv 级联Haar多目标检测

一、基于OpenCV的haar分类器实现笑脸检测 1、Haar分类器介绍 &#x1f680;Haar分类器是一种基于机器学习的目标检测算法&#xff0c;它使用Haar特征描述图像中的目标。Haar特征是基于图像亮度的局部差异计算得出的&#xff0c;可以用来描述目标的边缘、角落和线条等特征。 使用…

大模型开发(七):LLM提示工程(Prompt)与思维链(CoT)

全文共6500余字&#xff0c;预计阅读时间约13~20分钟 | 满满干货(附案例)&#xff0c;建议收藏&#xff01; 一、LLM模型的涌现能力 在GPT没有爆火之前&#xff0c;一直以来的共识都是&#xff1a;模型的规模越大&#xff0c;模型在下游任务上的能力越多、越强。 LLM原始训…

QT_Creator格式化工具使用

QT_Creator代码格式化工具使用 为了确保代码格式整齐统一&#xff0c;使用代码格式化工具会将写的代码自动格式化以保证格式统一 Astyle&#xff1a; A Free, Fast, and Small Automatic Formatter for C, C, C/CLI, Objective-C, C#, and Java Source Code 一、C和C代码格式化…

Ceph 服务的运用

目录 一、资源池 pool 管理 1.创建一个 Pool 资源池 2.查看集群 Pool 信息 3.查看资源池副本的数量 4.查看 PG 和 PGP 数量 5.修改 pg_num 和 pgp_num 的数量为 128 6.修改 Pool 副本数量为 2 7.修改默认副本数为 2 8.删除 Pool 资源池 8.1修改配置文件 8.2推送 ceph…

【半监督医学图像分割 2023 CVPR】PatchCL

文章目录 【半监督医学图像分割 2023 CVPR】PatchCL摘要1. 简介2. 相关工作2.1 半监督学习2.2 对比学习 3. 方法3.1 类感知补丁采样3.2 伪标记引导对比损失3.3 总体学习目标3.4 伪标号生成与求精 4. 实验5. 结果 【半监督医学图像分割 2023 CVPR】PatchCL 论文题目&#xff1a;…

MySQL操作库

MySQL操作库 一.创建数据库1. 创建数据库的方式2. 创建数据库时的编码问题3. 指定编码创建数据库4. 验证校验规则对数据库的影响 二.数据库与文件系统的关系三.操纵数据库1. 查看数据库2. 删除数据库3. 修改数据库 四.数据库的备份和恢复1.数据库的备份2.数据库的恢复 五.查看连…

OpenCV——总结《车牌识别》

1.图片中的hsv hsv提取蓝色部分 # hsv提取蓝色部分 def hsv_color_find(img):img_copy img.copy()cv2.imshow(img_copy, img_copy)"""提取图中的蓝色部分 hsv范围可以自行优化cv2.inRange()参数介绍&#xff1a;第一个参数&#xff1a;hsv指的是原图第二个参…

pytest 结合logging输出日志保存至文件

API_log.py import loggingclass loger():def logering(self):# 创建logger对象logger logging.getLogger(test_logger)# 设置日志等级logger.setLevel(logging.DEBUG)# 追加写入文件a &#xff0c;设置utf-8编码防止中文写入乱码test_log logging.FileHandler(test.log, a,…

11、动手学深度学习——语言模型和数据集:代码详解

我们了解了如何将文本数据映射为词元&#xff0c;以及将这些词元可以视为一系列离散的观测&#xff0c;例如单词或字符。 假设长度为 T T T的文本序列中的词元依次为 x 1 , x 2 , … , x T x_1, x_2, \ldots, x_T x1​,x2​,…,xT​。于是&#xff0c; x t x_t xt​&#xff08…

初识C++(上)——“C++”

各位CSDN的uu们你们好呀&#xff0c;小雅兰的全新专栏又来啦&#xff0c;这次的专栏主要介绍的是C&#xff0c;下面&#xff0c;让我们进入C的世界吧&#xff01;&#xff01;&#xff01; 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的…

【MySQL】根据MVCC和Read View分析事务的四种隔离级别在读写场景分别是如何体现其隔离性的

目录 一、数据库并发的三种场景 二、读写场景的MVCC 1、3个&#xff08;4个&#xff09;记录隐藏列字段 2、undo log&#xff08;撤销日志&#xff09; 3、模拟MVCC场景 3.1update场景 3.2delete场景 3.3insert 3.4select场景 4、Read View 5、RR和RC的区别 5.1当…

AI制图工具丨Midjourney产品功能介绍

了解如何使用Discord上的Midjourney Bot通过简单的文本提示创建自定义图像 Midjourney是一款AI制图工具&#xff0c;只要关键字&#xff0c;就能透过AI算法生成相对应的图片&#xff0c;只需要不到一分钟。 可以选择不同画家的艺术风格&#xff0c;例如安迪华荷、达芬奇、达利…

H3C-Cloud Lab实验-OSPF配置实验

一、实验拓扑图 实验需求&#xff1a; 1、按照图示配置 IP 地址 2、按照图示分区域配置 OSPF &#xff0c;实现全网互通 3、为了路由结构稳定&#xff0c;要求路由器使用环回口作为 Router-id&#xff0c;ABR 的环回口宣告进骨干区域 4、掌握OSPF初始化流程、路由表学习的过…

react和vue2/3父子组件的双向绑定

目录 Vue .sync&#xff08;2.3.0&#xff09; $emit &#xff08;2.3后&#xff09; 自定义组件的 v-model 2.2.0 v-modelemits(3.0取消了.sync) React 父组件回调函数 相关基础 框架 MVC &#xff08;Model View Controller&#xff09;/MVP&#xff08;Model View…