笔录---果壳中的C#第一章
---恢复内容开始---
笔录---果壳中的C#第二章
2.1 第一个C#程序
- 1.C#语句按顺序执行,以“;”结尾。
- Console.WriteLine(); console 为类,WriteLine()为类的方法,这一句为方法的执行行为,这些语句我们称为“语句块”,语句块由一对大括号中的0个或多个语句组成。
- 方法可以通过参数来接收调用者输入的数据,并通过返回类型给调用者返回数据。
- C#把Main方法作为程序默认的执行入口。Main方法也可以返回一个整型(而不是void),从而为程序执行的环境返回一个值。当然也可以接收一个字符串数组作为参数(数组中包含可传递给执行内容的任何参数)。例如:static int main(string[] args){......}
- 方法是C#中一种函数,另一种函数:*+—/的运算符、构造方法、属性、事件、索引器和终结器。
- 类是有 函数成员和数据成员组成的,形成了面向对象的构建块。(类也是一种类型)
- C#编译器(csc.exe)=vs的IDE---(.cs源代码文件)---编译---程序集(.net中最小的打包和部署单元)(一个程序集可以是一个应用程序,或者一个库)
- 一个普通的控制台程序或者Windows应用程序是一个.exe文件,包含一个main方法。
- 一个库是一个.dll文件,相当于一个没有入口的.exe文件。库是被其他库或者其他应用程序调用(引用).net Freamework.
- 手动使用csc.cs(命令行):看我的随笔
2.2 C#语法
- C#的语法是基于C和C#语法的
- 标识符是程序员为:类、方法、变量选择的名字。标识符必须是一个完整的词:字母和下划线开头的Unicode字符组成。C#标识符区分大小写。通常约定参数、局部变量、私有字段小写开头;而其他类型的标识符大写字母开头:MyMethod。
- 关键字:编译器保留的名称,不能把他们作为标识符。如:static void int class using等等。
当然还有上下文关键字,他们可以不用@前缀就能作为标识符。使用上下文关键字作为标志符时,应该避免与上下文的关键字混淆
字面值是静态嵌入程序中的原始数据片段,如int a=8;
标点有助于划分程序结构,(;)用于结束一条语句,这意味着语句就可以放在多行中,例如:
大括号用于把多条语句作为一个语句块。
- 运算符用于改变和结合表达式。我们常用的运算符为:. () * = 注:点号(.)表示某个对象的成员(或者数字小点数)括号在声明或者调用方法时使用,空括号在方法中没有参数时使用。而等号则用于赋值操作(==表示相等比较)
- C#提供了两种注释方式:单行注释和多行注释。单行注释有//到本行结束为止。例如:
- 类型定义了值得蓝图。值是由变量或者常量表示的存储位置。变量代表他的值可以改变,而常量则表示他的值不可以被改变。变量表示存储位置的符号,它包含的值可能会发生变化。相反常量总是表示一个值:
- 预定义类型:编译器特别支持的类型。int就是一种预定义类型,还有string类型(有限序列),预定义Bool型只有2种值,true和false。bool类型通常与if语句一起用于条件分支。
- 我们也能自定义类型,用简单函数来构建复杂函数一样,也可以用基本类型来构建复杂类型。
类型的成员:类型包含数据成员和函数成员。UnitConoverter的数据成员叫做ratio字段。UnitConoverter的函数成员Conver方法和UnitConverter构造方法。
- C#优点:预定义类型和自定义类型差别不大。比如int提供了ToString()这种函数成员来使用这些数据。
- 构造方法和实例化:实例化某种类型即可创建数据。预定义类型可以简单的通过字面值进行实例化 。new运算符应用于创建自定义类型的实例。下面我们就创建并声明一个UnitConverter类型的实例:
使用new运算符后会立刻实例化一个对象,对象的构造方法会在初始化时别调用。构造方法就像方法一样的定义,不同的是方法名和返回值类型简化成他所属的类型名。
- 实例和静态成员:由类型的实例操作的数据成员和函数成员=实例成员。所以呀!UnitConverter的convert方法和int的ToString方法就是实例成员的例子。在默认情况下,成员就是实例成员。而那些是不是有类型的实例操作而是由类型本省操作的数据成员和函数成员必须标记为static。Test.Main和Console.WriteLine就是静态方法。事实上,console类就是个静态类,他的所有成员都是静态的,永远不能创建一个Console的实例,使他在整个应用程序中被共享。对比静态成员和实例成员,在下面的代码中,实例字段Name属于特定的Panda实例,而静态字段Population属于所有的Panda实例:
- public关键字:public关键字把成员公开给其他类。把成员标记成为public就是在说:“这是我想让其他类看到的”
- 在C#中,兼容类型的实例可以相互转换。转换可以使隐式也可以是显示转换,如:
隐式转换只有在以下条件满足的情况下可以相互转换:
- 编译器能保证转换总能成功。
- 没有信息在转换中丢失。
显示转换满足以下条件:
1.编译器不能保证总是能成功。
2.信息在转换过程中有可能丢失。
- 值类型和引用类型:所有的C#类型可以分成以下的几类
- 值类型:包含大多数预定义类型(具体包括所有数值类型、char类型、bool类型)以及自定义struct类型和enum类型。
- 引用类型包含大多数类、数据、委托、接口类型
- 值类型和引用类型最根本的区别在于他们在内存中的处理方式。
下面讨论栈和堆的含义,也就是讨论C#的两种类据类型:值类型和引用类型;
虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型。
引用类型如:string,Object,class等总是在从托管堆上分配的,C#中new操作符返回对象的内存地址--也就是指向对象数据的内存地址。
以下是值类型与引用类型的表:
值类型:值类型变量或者常量的内容仅仅是一个值。例如:C#预定义int的内容是32位数据。
- 可以通过struct关键字定义一个自定义值类型:
- 对值类型实例的赋值操作总是会复制这些实例。
引用类型:引用类型比值类型复杂,它是由两部分组成:对象和对象的引用(变量名)。引用类型变量或者常量的内容是对一个包含值得对象的引用。下面举例
- 给引用类型赋值是只复制了引用,而不是一个对象的实例。这允许了不同的变量指向同一个对象,而值类型通常不可能存在这种问题,如果现在Point是一个类,我们重复之前的例子,那么对x的操作就会影响到Y的值了。
- NULL:一个引用可以赋值为字面值“null”,这表示他不指向任何对象:
- 存储开销:值类型实例正好占用需要存储其字段的内存。例如,Point要占用8字节的内存:yu
- 预定义类型分类:C#预定义类型有:
---恢复内容结束---
笔录---果壳中的C#第一章的更多相关文章
- Solidity 中文文档 —— 第一章:Introduction to Smart Contracts
第一章:智能合约简介 粗略地翻译了 Ethereum 的智能合约开发语言的文档:Solidity.欢迎转载,注明出处. 有任何问题请联系我,本人微信:wx1076869692,更多详情见文末. 我是 ...
- ASP.NET Core 中文文档 第一章 入门
原文:Getting Started 翻译:娄宇(Lyrics) 校对:刘怡(AlexLEWIS) 1.安装 .NET Core 2.创建一个新的 .NET Core 项目: mkdir aspnet ...
- ASP.NET Core中使用GraphQL - 第一章 Hello World
前言 你是否已经厌倦了REST风格的API? 让我们来聊一下GraphQL. GraphQL提供了一种声明式的方式从服务器拉取数据.你可以从GraphQL官网中了解到GraphQL的所有优点.在这一系 ...
- Elasticsearch7.1中文文档-第一章-入门
安装openjdk wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-secur ...
- ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门
ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...
- ASP.NET Core中使用GraphQL - 第二章 中间件
前文:ASP.NET Core中使用GraphQL - 第一章 Hello World 中间件 如果你熟悉ASP.NET Core的中间件,你可能会注意到之前的博客中我们已经使用了一个中间件, app ...
- ASP.NET Core中使用GraphQL - 第九章 在GraphQL中处理多对多关系
ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 ASP ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- 《Deep Learning》译文 第一章 前言(中) 神经网络的变迁与称谓的更迭
转载请注明出处. 第一章 前言(中) 1.1 本书适合哪些人阅读? 能够说本书的受众目标比較广泛,可是本书可能更适合于例如以下的两类人群.一类是学习过与机器学习相关课程的大学生们(本科生或者研究生). ...
随机推荐
- 【java规则引擎】之规则引擎解释
转载:http://www.open-open.com/lib/view/open1417528754230.html 现实生活中,规则无处不在.法律.法规和各种制度均是:对于企业级应用来说,在IT技 ...
- Python函数-enumerate()
enumerate(sequence, [start=0]) 作用: 将可循环序列sequence以start开始分别列出序列数据和数据下标,即对一个可遍历的数据对象(如列表.元组或字符串),enum ...
- 编码不规范之将request传参到sevice中
最近审核团队成员代码,发现确实有很多不规范的地方,其中问题之一就是将request.response.session等参数到传入到sevice层处理,在sevice中通过request对象获取到参数后 ...
- HIVE-执行distribute by时报错的解决过程---之如何分析hive执行的错误并解决
在执行一条HIVE语句的时候报了以下错误,重新检查了所有步骤,重启所有服务,发现没有问题. 但发现一个有趣的事情 1,select sno,sname,sex,sage,sdept from stud ...
- angular 的杂碎报错小知识
1:[ng:areq] Angular出现这种错误的原因,是由于没有在页面中使用模块引入controller导致的 所以 请确保你定义了这个controller后也引用了它. 2:Failed to ...
- angular.run 妙用
**1.浏览器判断**在angular做微信应用的时候,有时候我们也想把相同一份代码运行在非微信的浏览器上,这时候我们可以在angular的run上写点东西实现~例如asw.run函数里执行定义一个$ ...
- CentOS6.5 下MySQL傻瓜式安装
为了为服务器上装mysql我先在虚拟机上练习了一下特此记录并分享; 注:参考文章https://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/ ...
- PHP获取汉字拼音首字母 截取中文字符串
http://blog.csdn.net/everything1209/article/details/39005785 substr是按字符分割,而mb_strcut是按字节来分割,但是都不会产生半 ...
- FMDB是iOS平台的SQLite数据库框架
1.FMDB简介 什么是FMDBFMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 为什么使用FMDB使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...
- 蓝桥杯 算法训练 ALGO-126 水仙花
算法训练 水仙花 时间限制:1.0s 内存限制:256.0MB 水仙花数 问题描述 判断给定的三位数是否 水仙花 数.所谓 水仙花 数是指其值等于它本身 每位数字立方和的数.例 153 就是一 ...