笔录---果壳中的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 本书适合哪些人阅读? 能够说本书的受众目标比較广泛,可是本书可能更适合于例如以下的两类人群.一类是学习过与机器学习相关课程的大学生们(本科生或者研究生). ...
 
随机推荐
- HihoCoder1465 重复旋律8(后缀自动机)
			
描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 小Hi发现旋律可以循环,每次把一段旋律里面最前面一个音换到最后面就成为了原旋律的“循环相似旋律”,还可以 ...
 - NET持续集成与自动化部署
			
https://www.cnblogs.com/hunternet/p/9590287.html 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛.由于我们 ...
 - C#面向对象(一):明确几个简单的概念作为开胃菜
			
绝对干货,总结了下C#面向对象的干货内容以及我几年来的使用心得,分享出来 先明确几个简单概念作为开胃菜: 1.命名空间 namespace BackStageManagement.Services 关 ...
 - 【LeetCode】673. Number of Longest Increasing Subsequence
			
题目: Given an unsorted array of integers, find the number of longest increasing subsequence. Example ...
 - tp验证码
			
一.生成验证码 1.commonController.class.php class CommonController extends Controller{ public function getV ...
 - BZOJ4195:[NOI2015]程序自动分析
			
浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...
 - Spring集成Quartz定时任务框架介绍
			
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...
 - 简单的触发黑名单阻断演示 control+c
			
#include "stdafx.h"#include <signal.h>#include <windows.h> #include <iostre ...
 - 第四章 Javac编译原理(待续)
			
Javac是什么 Javac编译器的基本结构 Javac工作原理分析 设计模式解析之访问者模式
 - Oracle、SqlServer——临时表
			
一.oracle 1.概述: oracle数据库的临时表的特点: 临时表默认保存在TEMP中: 表结构一直存在,直到删除:即创建一次,永久使用: 不支持主外键. 可以索引临时表和在临时表基础上建立视图 ...