【C#基础概念】操作符
------------恢复内容开始------------
一、操作符概览
1、概念
- 操作符(Operator)也称“运算符”
- 操作数:是用来操作数据的,被操作符操作的数据称为操作数(Operand)
2、C#中的操作符
- 注:
- 优先级:从上往下优先级递减
- 同级情况下:
- 一般情况下,从左到右
- 赋值操作符顺序最晚,顺序从右向左
二、操作符的本质
1、本质是函数(算法)的“简记法”
- 计算机中的操作符来源于数学中的运算符,本质都是为了简记
- 例如:3+3+3+3 ---> 3*4
- 增加了可读性,也更加简单
- 操作符就是对函数(算法)的简记
- 例如:Add(Add(3,4)5) ---> 3+4+5
- 好处一眼就能看出来
2、操作符不能脱离与它关联的数据类型
- 操作符毕竟不是运算符,它和数学中还是有很多区别,其中最显著的就是:
- 计算机中的操作符不能和相关联的数据类型脱离
- 例如:
- int类型的5/4,结果是1(整型的除号,进行的是整除)
- double类型的5/4,结果是1.25(double的除号,是做浮点除法)
- 回顾数据类型的定义中的一句话:每一种数据类型都有和它相关的操作符。
3、示例:自定义类型,并为其定义操作符
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CreatOperator
{
class Program
{
static void Main(string[] args)
{
Person person1 = new Person();
Person person2 = new Person();
person1.Name = "Wanda";
person2.Name = "Vision";
List<Person> nation = person1 + person2;
//等价于:List<Person> nation = Person.GetMarry(person1, person2);
foreach (var p in nation)
{
Console.WriteLine(p.Name);
}
}
}
class Person
{
public string Name;
public static List<Person>operator +(Person p1, Person p2)
//此处自定义了操作符 +
//等价于:public static List<Person> GetMarry(Person p1,Person p2)
{
List<Person> people = new List<Person>();
people.Add(p1);
people.Add(p2);
for (int i = 0; i < 11; i++)
{
Person child = new Person();
child.Name = p1.Name + "and" + p2.Name + "'s child";
people.Add(child);
}
return people;
}
}
}
三、操作符的优先级
- 优先级顺序已经在本节课开头给出参考图
- 关于括号
- 可以用圆括号来改变优先级
- 圆括号可以嵌套
- 方括号和花括号不能改变优先级,在编程语言中是有专门的用途的
- [] 方括号:用来访问索引器
- {} 花括号:用来包括各种语句体
四、同级操作符的运算顺序
1、同级运算顺序:
- 除去不带赋值功能的操作符,从左到右
- 带赋值功能的操作符,从右到左
2、计算机同级运算没有结合律
- 前边说过,计算机的操作符虽然来自于数学的运算符,但是还是有区别的,很值得注意的一点就是,计算机同级运算符之间没有结合律。
- 因为编译器理解的时候只有一种方式:运算符优先级+同级运算顺序(从左往右或从右往左)
- 例如:3+4+5
- 只能理解为:Add(Add(3 , 4 )5)
- 不能理解为:Add(3 , Add( 4, 5))
五、操作符引用详解
typeof() 它其实是一个运算符(操作符)
能够获取指定类型的对象信息。返回的是Type对象。这样就可以通过类对象获取其他信息。如类的是不是抽象类,位于哪个程序集,类型的信息,方法有哪些,属性有哪些,字段有哪些。运算符 之所以能够动态推断类型是因为c#有一个c语言没有的东西 叫做元数据
-delegate操作符
在匿名方法中做操作符
【C#基础概念】操作符的更多相关文章
- js基础概念-操作符
操作符是操作数据值的符号,也叫做运算符. 按照操作个数分为:一元运算符,二元运算符,三元运算符. 按功能分为:位操作符,布尔操作符,乘性操作符,加性操作符,关系操作符,关系操作符,相等操作符,条件操作 ...
- JavaScript随笔记(一)基础概念以及变量类型
一.JavaScript中的基础概念 1.defer属性 一般我们在引用外部js文件的时候往往是将引用文件的位置放在标签当中,比如那么在标签中引入多个js文件时,浏览器会按照引入顺序加载执行这些引入的 ...
- JavaScript--我发现,原来你是这样的JS(基础概念--躯壳,不妨从中文角度看js)
介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第二篇(基础概念--躯壳篇),有着部分第三章的知识内容,当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的, ...
- JavaScript--我发现,原来你是这样的JS(基础概念--灵魂篇,一起来学js吧)
介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第三篇(灵魂篇介绍),有着剩下的第三章的知识内容,当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的,要看懂 ...
- JS--我发现,原来你是这样的JS(三)(基础概念--灵魂篇)
一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第三篇(灵魂篇介绍),有着剩下的第三章的知识内容. 红宝书这本书可以说是难啃的,要看完不容易,挺厚的,要看懂更不容易,要熟练js ...
- JS--我发现,原来你是这样的JS(二)(基础概念--躯壳篇--不妨从中文角度看js)
一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第二篇(基础概念--躯壳篇),有着部分第三章的知识内容,当然其中还有我个人的理解. 红宝书这本书可以说是难啃的,要看完不容易,挺 ...
- 第214天:Angular 基础概念
一.Angular 简介 1. 什么是 AngularJS - 一款非常优秀的前端高级 JS 框架 - 最早由 Misko Hevery 等人创建 - 2009 年被 Google 公式收购,用于其多 ...
- C#学习基础概念二十五问
C#学习基础概念二十五问 1.静态变量和非静态变量的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
随机推荐
- netty系列之:请netty再爱UDT一次
目录 简介 netty对UDT的支持 搭建一个支持UDT的netty服务 异常来袭 TypeUDT和KindUDT 构建ChannelFactory SelectorProviderUDT 使用UDT ...
- 学习AJAX必知必会(4)~同源策略、解决跨域问题(JSONP、CORS)
一.同源策略(Same-Origin Policy),是浏览器的一种安全策略. 1.同源(即url相同):协议.域名.端口号 必须完全相同.(请求是来自同一个服务) 2.跨域:违背了同源策略,即跨域. ...
- QMainWindow(二)
mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> class MainWindo ...
- golang中json格式化自定义日期格式
go 的time.Time,在json序列化是默认 2006-01-02T15:04:05Z07:00 的格式,十分不便, encoding/json包在序列化和反序列化的时候分别调用encode.g ...
- 在Chrome中打开网页时出现以下问题 您的连接不是私密连接 攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码、通讯内容或信用卡信息)
现象:在Chrome中打开网页时出现以下问题 您的连接不是私密连接 攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码.通讯内容或信用卡信息). 当点开"了解详情"后显示 ...
- java 方法实例
// 方法 public class Demo { public static void main(String[] args) { m(); m2(2); m3('3', 4); m4(4, 6); ...
- 【Android】安卓四大组件之内容提供者
[Android]安卓四大组件之内容提供者 1.关于内容提供者 1.1 什么是内容提供者 内容提供者就是contentProvider,作用有如下: 给多个应用提供数据 类似一个接口 可以和多个应用分 ...
- 010 Linux 文本统计与去重 (wc 和 uniq)
wc 命令一般是作为组合命令的一员与其他命令一同起到统计的作用.而一般情况下使用wc -l 命令较多. uniq 可检查文本文件中重复出现的行,一般与 sort 命令结合使用.一起组合搭配使用完成统计 ...
- react react-smooth动画
首先自然而然的安装一下依赖: npm install react-smooth --save-dev 接下来就是组件代码啦: import React, { Component, Fragment } ...
- Jenkins敏捷开发 自动化构建工具
一.序言 Jenkins 是一款自动化构建工具,能够基于 Maven 构建后端 Java 项目,也能够基于 nodejs 构建前端 vue 项目,并且有可视化 web 界面. 所谓自动化构建是按照一定 ...