C# --- 类型安全 与 var关键字

news2024/11/17 13:57:18

C# --- 类型安全 与 var关键字

  • 什么是类型安全
  • var关键字

什么是类型安全

  • 类型安全就是编译器在编译阶段会检查变量内容和变量类型是否匹配, 如果不匹配会抛出错误
  • 类型安全的语言包括Java, C++, C#等
  • 类型不安全的语言有JavaScript
  • 下面这段代码是JavaScript, 编译器不会进行类型检查, 不会进行任何报错或者标红提示, 所以string和int可以相加
var priceOfApple = 5;
priceOfApple = "is type safe";
var priceOfOrange = 7;
var totalPrice = priceOfApple + priceOfOrange;

强类型语言和弱类型语言 (strongly typed vs weakly typed)

  • 概念和类型安全类似, 强类型语言会要求所有的变量都要有相对应的类型, 并且会在编译阶段进行类型检查.而弱类型语言则不要求所有变量都有相对于的类型, 也不会对类型进行检查

静态类型检查和动态类型检查 (static typing vs dynamic typing)
在这里插入图片描述

var关键字

  • 局部变量可以在不给出显式类型的情况下声明。var 关键字告诉编译器从初始化语句右侧的表达式中推断变量的类型。推断的类型可以是内置类型、匿名类型、用户定义的类型或 .NET 类库中定义的类型
// i is compiled as an int
var i = 5;

// s is compiled as a string
var s = "Hello";

// a is compiled as int[]
var a = new[] { 0, 1, 2 };

// expr is compiled as IEnumerable<Customer>
// or perhaps IQueryable<Customer>
var expr =
    from c in customers
    where c.City == "London"
    select c;

// anon is compiled as an anonymous type
var anon = new { Name = "Terry", Age = 34 };

// list is compiled as List<int>
var list = new List<int>();
  • 注意即使有var keyword, c#依旧是强类型语言, 因为编译器还是会通过初始化语句右侧的表达式中推断变量的类型, 并且var 只适用于local variable. 方法的成员变量和方法返回值等都必须有显式的类型.

什么时候使用var关键字

  • var的优点
  • var 要求输入更少的字符。相比于 Dictionary<int, IList>,var 更短、更易读。
  • 如果方法调用的返回类型发生变化,var 需要更少的代码更改。你只需要更改方法声明,而不是每个使用它的地方。
  • var 鼓励你为变量使用描述性的名称。这意味着使用实例名称,而不是类型名称。例如:var customer = new Customer() 而不是 var c = new Customer()
  • var的缺点
  • var 隐藏了实际的变量类型。如果初始化器没有返回一个明确定义的类型,那么你可能无法知道变量的类型。
  • 使用 var 是懒惰的。虽然 var 比 Dictionary<int, IList> 要容易输入,但如果变量没有命名好,你就无法知道它指的是什么。
  • 使用 var 使得很难知道底层变量的实际类型。同样,一个命名合理的变量会自说明。
  • var 无法包含可空类型,例如 int?。这实际上是不正确的,因为你可以将值转换为可空类型。

建议: 当能看出变量类型的时候用var, 看不出类型的时候用实际类型声明

var count = 17;
var primeNumbers = new [] { 2, 3, 5, 7, 11, 13, 17 };
var customer = new Customer();
var activeOrders = GetAllOrders().Where(o => o.Active);
foreach (var activeOrder in activeOrders) {}
decimal customerBalance = GetCustomerBalance();
CustomerStatus customerStatus = GetCustomerStatus();

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git在工作中如何搭建和运用(巨详细!!)

最近有点闲&#xff0c;出一版git在实际公司上的一些运用 1&#xff0c;下载git&#xff0c; 下载git就不多说了&#xff0c;官方上下载安装就好了。 2&#xff0c;初始化 下载安装完成后&#xff0c;找个项目的空文件夹进去&#xff0c;右键点击git bash here &#xff0c;…

servlet和form和session表单实现最简单的登录跳转功能(详解,文末付源码)

目录 第一步&#xff1a;配置环境 在pom.xml引入servlet等依赖 这段代码赋值粘贴进web.xml 第二步&#xff1a;编写前端html的form表单 html代码&#xff08;复制这个&#xff09; 第三步&#xff1a;编写登录的java loginservlet代码&#xff08;复制这个&#xff09; 解释…

vue使用element plus引入ElMessage样式失效的问题

样式失效如图&#xff1a; 我使用的是按需引用&#xff0c;所以在main.js中直接导入下面样式就行&#xff1a; import element-plus/theme-chalk/index.css

Luogu P1280.尼克的任务

Luogu P1280.尼克的任务 原题点这里 思路 方法一&#xff1a;动态规划 这是一道动态规划的题目。 步骤主要分 5 5 5 步&#xff1a; 状态的定义转移式的推到递推顺序的判定边界的确定结果的输出 下面&#xff0c;我们针对这道题&#xff0c;细细地讲解一下每一个步骤 一…

MYSQL单表数据量达到多少时性能会严重下降的问题探讨!

不知从什么时候开始&#xff0c;有着MySQL单表数据量超过2000万性能急剧下降的说法。 在中国互联网技术圈流传着这么一个说法&#xff1a;MySQL 单表数据量大于 2000 万行&#xff0c;性能会明显下降。事实上&#xff0c;这个传闻据说最早起源于百度。具体情况大概是这样的&am…

PS 魔棒选区工具使用方法

我们现在PS中打开一个项目 然后 如下图 在工具左侧 选择魔棒工具 选择魔棒工具之后 我们的鼠标会变成像一个魔法棒一样的东西 我们拿着魔棒工具 在下图指向位置点一下 就可以看到 它在我们整个图上生成了一些选区 这个工具本身也带有一些色彩识别的功能 就相当于 你点的这…

【MySQL系列】MySQL库的学习及基本操作(增删查改)

「前言」文章内容大致是数据库的基本操作 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 哪里会有人喜欢孤独&#xff0c;不过是不喜欢失望罢了。 ——村上春树《挪威的森林》 目录 一、创建/查看数据库二、删除数据库三、…

Java8 lambda 表达式 forEach 如何提前终止?

首先&#xff0c;让我们看一下Java 8中如何使用forEach()方法。forEach()方法接受一个Consumer接口作为参数&#xff0c;该接口定义了一个accept()方法&#xff0c;该方法接受一个对象并对其执行一些操作。因此&#xff0c;我们可以通过Lambda表达式来实现Consumer接口。下面是…

Camtasia2023中文版电脑屏幕记录和课件制作工具

TechSmith Camtasia是一个非常容易使用的电脑屏幕记录和课件制作工具。Camtasia 2023软件集强大的录屏、视频编辑编辑、视频菜单制作、视频影院和视频播放功能于一体&#xff0c;可以轻松制作各种教学课件、微课堂等。Camtasia 2023支持一键录制和共享高质量截屏视频&#xff0…

Pytorch: 数据读取机制Dataloader与Dataset

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。 文章目录 数据读取机制Dataloader与DatasetDataLoader 与 Datasettorch.utils.data.DataLoader区分Epoch、Iteration、Batchs…

2022年真题 - 18 - 磁盘快照

磁盘快照 题目新增 15 G 的磁盘创建 LVM 卷挂载 LVM 卷写入文本创建快照挂载快照验证配置题目 StorageSrv - 磁盘快照 新增 15G 的磁盘,并将其做成 LVM 卷,VG 名称为 snapvg,LV名称为 snaplv 大小为 5G,挂载至 /snapdata 目录下;写入文本的文件数据至 /snapdata 目录下,…

2.5 DNS 应用 -- 2. DNS记录和消息格式

2.5 DNS 应用 -- 2. DNS记录和消息格式 DNS记录DNS协议与消息如何注册域名&#xff1f; DNS记录 资源记录(RR, resource records)TypeA Name: 主机域名Value: IP地址 TypeNS Name: 域(edu.cn)Value: 该域权威域名解析服务器的主机域名 TypeCNAME Name: 某一真实域名的别名 www.…

2.常见网页布局

2.1常见网页布局 第一种 第二种 第三种&#xff08;最常见的&#xff09; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

苹果自带的分享以及图片保存授权和应用跳转

// NSString *testToShare "分享的标题"; // NSURL *urlToShare [NSURL URLWithString:"http://www.baidu.com"]; // UIImage *imageToShare image; // NSArray *activityItems [te…

【算法】程序员必须掌握的算法?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 一&#xff1a;程序员为什么一定要学会算法 二&#xff1a;常见算法介绍 1、时间复杂度 2、空间复杂度 3. 必会内容&#xff1a; 4.使用场景 5. 算法学习网站&#xff1a; 三&…

《Linux基础命令讲解》学习笔记

Linux简单介绍 Linux不是一个具体的操作系统&#xff0c;而是一类操作系统的总称。 具体版本称为发行版&#xff1a; Red Hat:目前被IBM收购&#xff0c;收费版&#xff0c;目前全球最大的Linux供应商 CentOS: Red Hat推出的免费版 Ubuntu :界面比较友好 Linux系统目录结构…

vue3+element-plus实现日历组件农历显示且带列表数据

calendar.js https://gitee.com/mirrors/calendar-js.git 这个js可以去下载&#xff0c;里面涉及的有点多 要设置日历每周以周一开始&#xff0c;需要在main.js中加入这一行代码 import dayjs/locale/zh-cn; // 设置日历每周从周一开始<template><ELPlusLanguageC…

华秋约定您!7月11-13日慕尼黑上海电子展不见不散~

慕尼黑最新华秋展会攻略来啦 华秋携海量产品与方案 以及丰富的元器件产品线 即将亮相慕尼黑上海电子展 现场干货和福利不断 简直不要太精彩&#xff01; 敲黑板 划重点 华秋展位 时间&#xff1a;2023年7月11日-7月13日 地点&#xff1a;国际会展中心&#xff08;上海&…

IT-OT 安全融合是优化风险管理的关键

最新报告揭示了运营技术检测和响应方面的显着可见性差距。 全球网络安全运营商趋势科技宣布了一项新研究&#xff0c;显示企业安全运营中心 (SOC) 正在将其能力扩展到 OT 领域。 然而&#xff0c;重大的可见性和技能相关的挑战仍然造成障碍。 研究发现&#xff0c;一半的组织…

公共医疗数据库汇总:无需实验,高效论文撰写利器

一、引言 在医学研究领域&#xff0c;获取高质量的数据和文献资源是进行科学论文撰写的关键。随着信息技术的发展&#xff0c;以及公共医疗数据库的不断壮大和完善&#xff0c;研究人员可以轻松地获取大量的医学数据和文献信息&#xff0c;从而提高论文撰写的效率和质量。本文将…