首页 > 编程语言 >C#(9):字段,属性,索引器

C#(9):字段,属性,索引器

时间:2024-01-30 10:13:43浏览次数:26  
标签:set get C# age private 索引 int 属性


函数体中的变量是局部变量

字段的修饰符

属性是为了简略字段的set()get()方法而发明的,可以起到同样的避免直接使用字段赋值来暴露数据的问题
将属性封装成(refactory)属性方法的方法:ctrl +r e
只读方法只有get(){}而没有set(){}
注意:只读方法属性和private set(){}的区别,只读属性无论方法内还是方法外都无法修改数据并且没有set(){},而private set(){}在方法属性中有private set(){},其无法在该类方法体外对其进行赋值,只能在方法体内部进行赋值,其并不是只读属性


set => age = value;这种写法和setter有什么区别吗
 在 C# 中,它们实际上没有太大的区别,它们都是设置属性的访问器(setter)。这两种写法都是在给属性赋值。

`set => age = value;` 是C# 7.0中引入的新语法,称为 "Expression-bodied members"。这是写属性setter的简洁方式。

传统的 setter 方法:

... 
```
private int age;
public int Age
{
    get { return age; }
    set { age = value; }
}
```

可以被简化为:
... 
```
private int age;
public int Age
{
    get => age;
    set => age = value;
}
```

但是,如果你的 setter 中除了设置属性值还要执行其他代码(例如调用其他方法),那么你还是必须使用传统的 getter/setter 写法。例如:
...
```
private int age;
public int Age
{
    get
    {
        return age;
    }
    set
    {
        age = value;
        this.canWorkCalculator();
    }
}
```
动态计算值的属性
 public class people
 {
     private int age;
     //封装字段
     public int Age {
         get { return age; }
         set { age = value;
             //设定age时自动给canWork赋值,根据访问情况决定是访问时实时计算还是设定时计算
             this.canWorkCalculator();
         }
     }

     private bool canWork;
     public bool CanWork { 
         get => canWork; 
        //改为只读属性
     }
     private void canWorkCalculator() {
         if (this.age >= 18)
         {
             this.canWork = true;
         }
         else
         {
              this.canWork= false;
         }
     }

 }


 

`this`方法在C#中被称为索引器(Indexer)。它允许一个对象像数组一样通过索引进行访问,提供了一种类似数组的方便访问方式。

在这段代码中,`this`方法对字符串参数`subject`进行了重载,使得可以通过[subject]这样的形式来获取或设置与某个`subject`相对应的成绩(比如`scores["Math"] = 95;`或`int mathScore = scores["Math"];`),增强了类的易用性。如果`subject`不存在,该函数会返回null。

 

标签:set,get,C#,age,private,索引,int,属性
From: https://www.cnblogs.com/houyuxuan/p/17803167.html

相关文章

  • C#(10):传值,输出,引用,数组,具名,可选参数,拓展方法
    传值参数:被调用后并不会更改变量值,改变的是方法中传去的变量值副本,仅影响方法中的参数值,不影响变量本身的值变量以及参数指向的是地址,方法调用后参数中重新指向新对象地址,将原来引用的变量对象地址丢弃,重新创建新对象地址  getHashcode方法,获取内存中的对象的has......
  • C# 角度转化度分秒
    1///<summary>2///角度转化度分秒3///秒取整4///</summary>5///<paramname="angle"></param>6///<returns></returns>7privatestringAngleConver......
  • arcgis server地图服务访问权限设置及arcgis server token获取
    一、地图服务访问权限设置。当我们发布arcgis地图服务后,由于涉密或者其他原因,不想让所有人看到地图服务。这时候我们可以对地图设置权限。怎末设置那?进入你们arcgis管理。地址:http://localhost:6080/arcgis/manager/index.html#新建角色。  新建用户。 新建成功。 ......
  • 繁体字转化为简体字 https://share.weiyun.com/ZsmZl6g5 密码:rc8mva
    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788......
  • 基于volcano实现节点真实负载感知调度
    本文分享自华为云社区《基于volcano实现节点真实负载感知调度》,作者:可以交个朋友。背景默认调度器调度器视某个节点的空闲可调度资源=节点可分配资源-SUM(节点上已调度Pod们的request),当某个Pod处于pending状态待调度时,默认调度器根据Pod中指定的request值和各个节点的空闲......
  • Easy-Es操作Elasticsearch
    目录1Easy-Es1.1简介1.2MySQL与Easy-Es语法对比1.3集成及配置1.3.1pom.xml1.3.2配置1.4使用1.4.1注解的使用1.4.2EsMapper接口1.4.3简单搜索1.5使用案例1.5.1综合商品搜索1.5.2相关商品推荐1.5.3聚合搜索商品相关信息1Easy-Es使用过SpringData操作ES的小伙伴应......
  • Unity3D DrawCall和openGL、光栅化等有何内在联系详解
    Unity3D是一款跨平台的游戏引擎,广泛应用于游戏开发领域。在Unity3D中,DrawCall是一个重要的概念,它与OpenGL、光栅化等技术有着密切的内在联系。本文将详细解释DrawCall的概念,并给出相关技术的详细解释和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础......
  • 在线CAD开发(网页浏览DWG)中用到的数学库
    ​前言在网页版CAD二次开发中,正确的使用数学库是十分重要的,我们通过[快速入门]了解到如果打开图纸后,希望对图形进行各种处理,就需要各种数学计算,而mxcad提供了一些类来参与计算或者表示一些数据结构。               向量McGeVector3d如果不......
  • 轻松打造Windows服务:将.NET Core项目转化为无缝运行的后台服务
     概述:本教程教您如何将.NETCore项目打造成Windows服务,实现无需用户登录的后台运行。通过简单步骤,您可以快速部署并管理服务,确保应用持续高效运行。将.NET项目制作成Windows服务可以让你的应用在后台持续运行,无需用户登录。以下是将.NETCore项目制作成Windows服务的步骤:步......
  • elasticsearch 查询:term&terms
    1.term查询term查询:完全匹配查询,搜索前不会对关键字进行分词。只支持单个feild查询。不设置from,size。默认返回10条#测试--term查询POST/king_test_person/_search{"from":0,#limit?"size":20,#limitx,?"query":{"term":{......