【1】2.1.1 Hello,World!

1.

using static System.Console;
// ...
WriteLine("Hello World!");

提前在文件头申明一些要用到的类,方便下面使用

2.

Program类里包含了一个叫Main的方法。每个C#可执行程序(如控制台程序,Windows程序,Windows服务或者Web应用程序)都需要一个入口点——Main方法,注意开头的M是大写的。当程序运行的时候,会首先调用这个方法。这个方法的返回类型只能是空(void)或者整型(int)。

【2】2.2.1 变量初始化

1.一次定义多个变量

int x=10; bool y=true;

2.C#有两个方法负责确认变量在使用前是否正确初始化:

  • 变量通常是class或者struct里的字段,如果没有显式初始化,当创建变量的时候会尝试给它们赋初值0(class和struct的初值我们延后讨论)。
  • 方法里的局部变量在任何语句使用它们之前必须显式初始化,这种情况下,变量不需要在声明的时候直接赋初值,但是编译器会检查方法里的所有可能赋值的地方,假如在初始化前就对变量进行其他操作,编译器会直接标记一个错误。

【3】2.2.2 类型诊断

通过var关键字来进行类型的诊断。

【4】2.2.3 变量的作用域

在相同的作用域内,同名变量不能声明两次。

比如在for循环内外不能重复申明同名变量。

class-static 可以申明第二个变量,static内的称为内部变量。不是一个level。

【5】2.2.4 常量

const int a = 100; //值不能修改

【6】2.3.1 值类型和引用类型

从概念上来讲,两者的区别在于值类型是直接存储的变量值,存储在栈(stack)上;引用类型的存储的是一个引用地址,它的实际值存在托管堆(managed heap)上。

值类型:一个变量独占一片空间。

引用类型;一片文献,变量A可以引用,变量B也可以引用。变量A、B修改其中的内容,并不会使原来的文献改变。

L:引用类型的变量设置成null;别名引用

【7】2.3.3 预定义的值类型

C#拥有15个预定义的数据类型,包括13个值类型与2个引用类型(string和object)。

整型8个:sbyte(8位有符号整数),byte(8位无符号整数);int值得是System.Int32;前面+u表示无符号整数。

16进制数则要求以0x开头。

二进制数需要以0b开头。

数字分隔符_

long l1 = 0x1234_5678_90ab_cedf;
long l2 = 0x1234567890abcdef;
Console.WriteLine((l1 == l2).ToString());//true

浮点数:double、float

float f = 12.3F;

Decimal类型:128位高精度浮点数。常用于金融计算

decimal d = 12.30M;

布尔值:bool类型

char类型:表示单字符

char c = 'A';
char c = "A"; //无法将类型string隐式地转换成char

转义字符\

【8】2.3.4 预定义的引用类型

object类型和string类型

@字符与$前缀标识

【9】2.4.1 条件语句

1.if语句:加入满足某个条件,则...;不满足的话,则...

作为if的判断条件,只能是true或者false或者返回true/false的表达式,C#不允许使用整型代替。

2.switch语句:

switch (integerA)
{
case 1:
Console.WriteLine("integerA = 1");
break;
case 2:
Console.WriteLine("integerA = 2");
break;
case 3:
Console.WriteLine("integerA = 3");
Console.WriteLine("integerA is not 1 or 2.");
break;
default:
Console.WriteLine("integerA is not 1, 2, or 3");
break;
}

case之后的值必须是常量,case书写的顺序完全没有任何关系。

【10】2.4.2 循环

1.for循环:根据指定的判断条件是否为true决定是否进入下一次循环。

嵌套使用for循环

2.while循环

3.do...while循环:先执行循环体,然后再检测condition是否为true。

4.foreach循环:循环访问一个集合里的所有元素(item)。

在foreach循环里所有元素都是只读的,你不能进行任何修改操作。

【11】2.4.3 跳转语句

1.goto语句:

switch(country)
{
case "America":
CallAmericanOnlyMethod();
goto case "Britain";
case "France":
language = "French";
break;
case "Britain":
language = "English";
break;
}

2.break语句:break语句可用于跳出像for,foreach,while,do...while和switch的case这样的循环体。

在嵌套循环里使用了break,它仅仅会跳出它所在的那一层循环体,外部循环依然可以正常使用。

3.continue语句:当编译器遇到continue的时候,他会中止本次循环,直接开始下一次循环执行。

4.return语句:通常用于结束一个class的方法,将控制权交回给方法的调用者。如果方法有返回类型,return语句必须返回该类型的值。而如果方法声明为void,则不需要返回任何值,仅仅书写一个return即可。

【12】2.5.2 命名空间的别名

using关键字的另外一个用法就是为类和命名空间指定别名。

using System;
using Introduction = Wrox.ProCSharp.Basics;
class Program
{
static void Main()
{
Introduction::NamespaceExample NSEx = new Introduction::NamespaceExample();
Console.WriteLine(NSEx.GetNamespace());
}
} internal class Introduction
{
} namespace Wrox.ProCSharp.Basics
{
class NamespaceExample
{
public string GetNamespace()
{
return this.GetType().Namespace;
}
} internal class Introduction
{
}
}

【13】Main()方法

【14】2.7 使用注释

1.单行注释://

2.多行注释:/*...*/

3.XML注释:

    ///<summary>
/// Wrox.MathLib.Calculator class.
/// Provides a method to add two doublies.
///</summary>

一些标签,描述

【15】2.8 C#预处理器指令

1.#define 和#undef

2.#if、#elif、#else 和#endif

3.#warning 和 # error

4.#region 和#endregion

5.#line

6.#pragma

【16】2.9.3 命名约定

Pascal命名法:每个单词的第一个字母通常是大写。

驼峰命名法(camel casing):第一个单词的首字母使用小写

在下述的3种情况里建议使用驼峰命名法:

  • 用private声明的私有字段field,然而,这种字段更常用的方式是,前头带下划线;
  • 方法的参数;
  • 区分含有同样名称的包装类型。例如属性和其对应的字段。

参考博客:https://www.cnblogs.com/zenronphy/p/ProfessionalCSharp7Chapter2.html#211-helloworld

C#高级编程第11版 - 第二章 索引的更多相关文章

  1. C#高级编程第11版 - 第九章 索引

    [1]9.1 System.String 类 String类中关键的方法.如替换,比较等. [2]9.1.1 构建字符串 1.String类依然有一个缺点:因为它是不可变的数据类型,这意味当你初始化一 ...

  2. C#高级编程第9版 第二章 核心C# 读后笔记

    System命名空间包含了最常用的.NET类型.对应前面第一章的.NET基类.可以这样理解:.NET类提供了大部分的功能,而C#语言本身是提供了规则. pseudo-code,哈哈,秀逗code.伪代 ...

  3. C#高级编程第11版 - 第八章 索引

    [1]8.1 引用方法 1.委托是指向方法的.NET地址变量. 2.委托是类型安全的类,定义了返回类型和参数类型.委托类不单单只包含一个方法引用,它也可以保存多个方法的引用. 3.Lambda表达式直 ...

  4. 2019-1-17 前言 C#高级编程(第11版)

    C#已更新为更快的速度.主要版本7.0是2017年3月发布,次要版本7.1和7.2很快发布在2017年8月和2017年12月.通过项目设置,您可以与每个应用程序一起分发,是开源的,不可用仅适用于Win ...

  5. 《Node.js 高级编程》简介与第二章笔记

    <Node.js 高级编程> 作者简介 Pedro Teixerra 高产,开源项目程序员 Node 社区活跃成员,Node公司的创始人之一. 10岁开始编程,Visual Basic.C ...

  6. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

  7. C#高级编程第11版 - 第六章 索引

    [1]6.2 运算符 1.&符在C#里是逻辑与运算.管道符号|在C#里则是逻辑或运算.%运算符用来返回除法运算的余数,因此当x=7时,x%5的值将是2. [2]6.2.1 运算符的简写 1.下 ...

  8. C#高级编程第11版 - 第五章 索引

    [1]5.1 泛型概述 1.通过泛型,你可以创建独立于特定类型(contained types)以外的方法和类,而不用为不同类型编写多份同样功能的代码,你只需要创建一个方法或者类. 2.泛型类使用泛型 ...

  9. C#高级编程第11版 - 第三章 索引

    [1]3.1 创建及使用类 1.构造函数:构造函数的名字与类名相同: 使用 new 表达式创建类的对象或者结构(例如int)时,会调用其构造函数.并且通常初始化新对象的数据成员. 除非类是静态的,否则 ...

随机推荐

  1. winform关闭登录窗体打开主窗体的方法

    实际使用 Program.cs代码 //声明一个线程 private static System.Threading.Mutex mutex; /// <summary> /// 应用程序 ...

  2. 【进程/作业管理】篇章一:Linux进程及管理(专用内存监控类工具)------【vmstat、pmap】

    主要讲解专用内存监控工具的使用:vmstat.pmap命令的使用. 命令概览: vmstat 显示虚拟内存状态 pmap 报告进程与内存映射关系 vmstat命令是最常见的Linux/Unix监控工具 ...

  3. ucore操作系统学习(七) ucore lab7同步互斥

    1. ucore lab7介绍 ucore在前面的实验中实现了进程/线程机制,并在lab6中实现了抢占式的线程调度机制.基于中断的抢占式线程调度机制使得线程在执行的过程中随时可能被操作系统打断,被阻塞 ...

  4. IntelliJ IDEA如何用maven命令打jar包

    IntelliJ IDEA如何用maven命令打jar包?下面给大家详细介绍一下具体步骤及说明. 工具/原料   IntelliJ IDEA maven 方法/步骤     第一步在CMD命令窗口输入 ...

  5. git使用下

    Git 内部工作原理 Git 本质上是一个内容寻址文件系统,最初是一套面向版本控制系统的工具集,而不是一个完整的用户友好的版本控制系统.因此它还包含了一些用于完成底层工作的命令,这些命令被称为&quo ...

  6. SQL中隔行编号的操作

    一般在sql中进行排序编号的时候都是: row_number() over(order by xxx) 但是有时候某些行不想让他们参与排序,这时候可以: row_number() over(order ...

  7. java类的定义位置

    java的类可以定义在任何位置: 一般的类是一个文件里面写一个类,且类名和文件名相同,但是定义类的位置可以是任意的如图: 上图示例: public class A{ class B{ } static ...

  8. 8种常被忽视的SQL错误用法,你中招了吗?

    前言 MySQL在近几年仍然保持强劲的数据库流行度增长趋势.越来越多的客户将自己的应用建立在 MySQL 数据库之上,甚至是从 Oracle 迁移到 MySQL上来.但也存在部分客户在使用 MySQL ...

  9. Python 爬虫系列

    爬虫简介 网络爬虫 爬虫指在使用程序模拟浏览器向服务端发出网络请求,以便获取服务端返回的内容. 但这些内容可能涉及到一些机密信息,所以爬虫领域目前来讲是属于灰色领域,切勿违法犯罪. 爬虫本身作为一门技 ...

  10. 论JAVA实现MYSQL 行级锁(分布式锁实现方案一)

    @Override @Transactional public String getCustomerId() { // return String.valueOf(getSequenceId(SEQ_ ...