首页 > 其他分享 >get和set,?和 ?? ,?: ,?. ?:[]的用法和区别

get和set,?和 ?? ,?: ,?. ?:[]的用法和区别

时间:2024-05-29 17:01:57浏览次数:23  
标签:set name get 用法 访问 null 属性

C#中,getset 访问器通常与属性(property)一起使用,用于定义如何读取和写入属性的值。属性提供了一种比字段(field)更灵活的方式来封装类的数据成员。

区别

  1. 用途
    • get 访问器:用于读取属性的值。
    • set 访问器:用于设置属性的值。
  2. 返回值
    • get 访问器必须返回一个值,其类型必须与属性的声明类型相同。
    • set 访问器没有返回值(即返回类型为void),但它接受一个参数,该参数的类型必须与属性的声明类型相同。
  3. 执行时机
    • 当读取属性时,会执行 get 访问器中的代码。
    • 当给属性赋值时,会执行 set 访问器中的代码。
  4. 封装性
    • 使用 getset 访问器可以隐藏数据的实际存储和表示,并提供更复杂的读写逻辑(如验证、计算等)。

用法

以下是一个简单的示例,展示了如何在C#中使用 getset 访问器来定义属性:

public class Person  
{  
    // 私有字段,用于存储姓名  
    private string _name;  
  
    // 属性:Name  
    // 使用 get 访问器来读取 _name 字段的值  
    // 使用 set 访问器来设置 _name 字段的值  
    public string Name  
    {  
        get { return _name; }  
        set  
        {  
            // 可以在这里添加验证逻辑,例如检查名称是否为空或长度是否合适  
            if (string.IsNullOrWhiteSpace(value))  
            {  
                throw new ArgumentException("Name cannot be null or whitespace.");  
            }  
            _name = value;  
        }  
    }  
  
    // 类的其他成员...  
}  
  
// 使用示例  
Person person = new Person();  
person.Name = "Alice"; // 调用 set 访问器  
string name = person.Name; // 调用 get 访问器  
Console.WriteLine(name); // 输出 "Alice"

Name 是一个属性,它使用 getset 访问器来读取和设置 _name 字段的值。在 set 访问器中,我们添加了一个简单的验证逻辑,以确保名称不为空或只包含空白字符。如果尝试将空或只包含空白字符的字符串分配给 Name 属性,则会抛出一个 ArgumentException 异常。

(单独使用时)通常不是一个特定的编程语言的运算符或符号,但在某些上下文中,它可能被用作表示疑问或作为占位符。然而,对于其他符号,我将解释它们在C#和某些其他编程语言中的用法和区别。

?? - 空合并运算符(Null-conditional Operator)

在C#中,?? 是一个空合并运算符。它用于检查左侧的操作数是否为 null。如果是,则返回右侧的操作数;否则,返回左侧的操作数。

 

int? a = null;  
int b = a ?? 10; //左边a等于空的时候,10赋值给a 
a = 5;  
b = a ?? 10; // b 等于 5 不为空

?: - 条件运算符(Conditional Operator)或三元运算符(Ternary Operator)

条件运算符用于根据条件返回两个值之一。它的格式是 condition ? value_if_true : value_if_false

int a = 5;  
int b = 10;  
int max = (a > b) ? a : b; // max is 10

?. - 空条件运算符(Null-conditional Access Operator)

在C#中,?. 是一个空条件运算符,用于在访问成员(属性、方法等)之前检查对象是否为 null。如果对象是 null,则整个表达式的结果也是 null,而不会抛出 NullReferenceException 异常。

Person person = null;  
string name = person?.Name; // name is null because person is null

?.[] - 空条件索引器访问

?. 类似,但用于索引器(例如数组或集合的索引)。如果对象是 null,则不会尝试访问索引器,而是整个表达式的结果为 null

List<string> list = null;  
string item = list?[0]; // item is null because list is null

注意:在C#中,你不能直接将 ?.[] 结合使用(如 ?.[]),但你可以这样写 list?.[0](尽管这是无效的语法)。通常,你会先使用 ?. 检查对象是否为 null,然后再访问索引器,如上面的示例所示。

[] - 索引器(Indexer)

索引器允许类或结构的实例像数组一样被索引。它们通常用于提供对集合中元素的访问,但也可以用于提供对对象的任何类型的字段或属性的访问

List<string> list = new List<string> { "a", "b", "c" };  
string item = list[1]; // item is "b"

 

标签:set,name,get,用法,访问,null,属性
From: https://www.cnblogs.com/forges/p/18220644

相关文章

  • Winget使用指南
    Chocolatey、Scoop和Winget都是流行的Windows软件包管理工具,最近我使用了Winget安装了Git,使用命令行方式安装或更新软件(特别是非GUI软件——比如Git、Maven等)非常方便,在此简介一下Winget的常用指令。1.是否已安装Winget要确定是否已安装Winget,可以在PowerShell中执行......
  • Vue 3 设置中的新 `<script setup>` 语法是如何使用的?
    Vue3中的新<scriptsetup>语法详解Vue.js作为现代前端框架的一大代表,它简洁易用的特性和不断创新的理念吸引了一大批开发者。在Vue3中推出了很多改进和新特性,其中一个引起广泛关注的便是<scriptsetup>语法。这篇文章将详细介绍Vue3中的<scriptsetup>语法,......
  • .net6 类库 读取appsettings.json
    类库项目引入 Microsoft.Extensions.Configuration和 Microsoft.Extensions.Configuration.Json程序包以Sqlsugar读取配置文件为例:publicclassSqlsugarBase{publicstaticIConfigurationConfiguration{get;set;}staticSqlsugarBase()......
  • docker数据卷的作用及用法
    一、数据卷的作用解决容器与数据耦合的问题1.当我们要进入到docker容器内部修改代码时,很不方便,不便于修改。2.数据不可复用,在容器内的修改对外是不可见的,所有修改对新创建的容器是不可复用的。3.升级维护困难,数据在容器内,当我们要升级容器必然要删除旧容器,所有数据也都跟着删除了......
  • sed用法:小命令,大能量
    第一部分:sed命令简介sed,即流编辑器(StreamEditor),是Linux系统中用于处理文本文件的强大工具。它能够对文本进行复杂的搜索、替换、插入和删除操作,而无需打开文本编辑器。sed的用途非常广泛,从简单的文本替换到复杂的文本转换,它都能胜任。sed命令的历史和由来sed起源于UNIX......
  • IconButton用法
    文章目录1.概念介绍2.使用方法2.1filled风格2.2filledTonal风格2.3outlined风格3.代码与效果3.1示例代码3.2运行效果4.内容总结我们在上一章回中介绍了"如何修改NavigationBar组件的形状"相关的内容,本章回中将介绍IconButtion组件.闲话休提,让我们一起Talk......
  • 在Spring Boot应用中使用RestTemplate类发送不同的HTTP GET请求(带请求头、不带请求头)
    原文链接:https://www.cnblogs.com/windyWu/p/16872871.html在本文中,你将学会在SpringBoot应用中使用RestTemplate类发送不同的HTTPGET请求。简单GET请求发送GETHTTP请求,可以使用getForObject()或getForEntity()方法。如下示例,使用getForObject()方法获取JSON字符串形式的用......
  • eclipse转IDEA出现Cannot resolve method 'getContextPath()'
    如图 解决方法:file——》projetStu…… module——》项目——》Dependence 选tomcat applyok解决  参考——https://blog.csdn.net/ZhaZha__Hui/article/details/109551716......
  • 【chisel】chisel中for (i <- 0 until N-2) {} 的用法,表示什么?
    在Chisel中,for(i<-0untilN-2){}是一个for循环的语法,它表示从0开始到N-2的整数(不包括N-2),并对每个整数i执行大括号{}内的代码块。这里的until是Scala语言的一个关键字,用于生成一个从起始值到结束值之前的所有整数的序列。在Chisel中,Scala的这个特性......
  • linux使用ipset禁止国外IP访问
    一、安装ipsetyuminstallipset-y二、禁止firewalldsystemctlstopfirewalldsystemctldisablefirewalld三、设置iptables默认允许规则iptables-PINPUTACCEPT四、清空其他规则[root@hlcc~]#iptables-F五、查看规则[root@hlcc~]#iptables-LChain......