笔录---果壳中的C#第一章

---恢复内容开始---

笔录---果壳中的C#第二章

2.1 第一个C#程序


  1. 1.C#语句按顺序执行,以“;”结尾。
  2. Console.WriteLine();     console 为类,WriteLine()为类的方法,这一句为方法的执行行为,这些语句我们称为“语句块”,语句块由一对大括号中的0个或多个语句组成。
  3. 方法可以通过参数来接收调用者输入的数据,并通过返回类型给调用者返回数据。
  4. C#把Main方法作为程序默认的执行入口。Main方法也可以返回一个整型(而不是void),从而为程序执行的环境返回一个值。当然也可以接收一个字符串数组作为参数(数组中包含可传递给执行内容的任何参数)。例如:static int main(string[] args){......}
  5. 方法是C#中一种函数,另一种函数:*+—/的运算符、构造方法、属性、事件、索引器和终结器。
  6. 类是有 函数成员和数据成员组成的,形成了面向对象的构建块。(类也是一种类型)
  7. C#编译器(csc.exe)=vs的IDE---(.cs源代码文件)---编译---程序集(.net中最小的打包和部署单元)(一个程序集可以是一个应用程序,或者一个库)
  8. 一个普通的控制台程序或者Windows应用程序是一个.exe文件,包含一个main方法。
  9. 一个库是一个.dll文件,相当于一个没有入口的.exe文件。库是被其他库或者其他应用程序调用(引用).net Freamework.
  10. 手动使用csc.cs(命令行):看我的随笔

2.2   C#语法


  1. C#的语法是基于C和C#语法的
  2. 标识符是程序员为:类、方法、变量选择的名字。标识符必须是一个完整的词:字母和下划线开头的Unicode字符组成。C#标识符区分大小写。通常约定参数、局部变量、私有字段小写开头;而其他类型的标识符大写字母开头:MyMethod。
  3. 关键字:编译器保留的名称,不能把他们作为标识符。如:static void int class using等等。
  4. 当然还有上下文关键字,他们可以不用@前缀就能作为标识符。使用上下文关键字作为标志符时,应该避免与上下文的关键字混淆

  5. 字面值是静态嵌入程序中的原始数据片段,如int a=8;

  6.  

    标点有助于划分程序结构,(;)用于结束一条语句,这意味着语句就可以放在多行中,例如:

  7.  大括号用于把多条语句作为一个语句块。

  8. 运算符用于改变和结合表达式。我们常用的运算符为:. () * =      注:点号(.)表示某个对象的成员(或者数字小点数)括号在声明或者调用方法时使用,空括号在方法中没有参数时使用。而等号则用于赋值操作(==表示相等比较)
  9. C#提供了两种注释方式:单行注释和多行注释。单行注释有//到本行结束为止。例如:
  10. 类型定义了值得蓝图。值是由变量或者常量表示的存储位置。变量代表他的值可以改变,而常量则表示他的值不可以被改变。变量表示存储位置的符号,它包含的值可能会发生变化。相反常量总是表示一个值:

  11. 预定义类型:编译器特别支持的类型。int就是一种预定义类型,还有string类型(有限序列),预定义Bool型只有2种值,true和false。bool类型通常与if语句一起用于条件分支。
  12. 我们也能自定义类型,用简单函数来构建复杂函数一样,也可以用基本类型来构建复杂类型。
  13. 类型的成员:类型包含数据成员和函数成员。UnitConoverter的数据成员叫做ratio字段。UnitConoverter的函数成员Conver方法和UnitConverter构造方法。

  14. C#优点:预定义类型和自定义类型差别不大。比如int提供了ToString()这种函数成员来使用这些数据。
  15. 构造方法和实例化:实例化某种类型即可创建数据。预定义类型可以简单的通过字面值进行实例化 。new运算符应用于创建自定义类型的实例。下面我们就创建并声明一个UnitConverter类型的实例:

    使用new运算符后会立刻实例化一个对象,对象的构造方法会在初始化时别调用。构造方法就像方法一样的定义,不同的是方法名和返回值类型简化成他所属的类型名。

  16. 实例和静态成员:由类型的实例操作的数据成员和函数成员=实例成员。所以呀!UnitConverter的convert方法和int的ToString方法就是实例成员的例子。在默认情况下,成员就是实例成员。而那些是不是有类型的实例操作而是由类型本省操作的数据成员和函数成员必须标记为static。Test.Main和Console.WriteLine就是静态方法。事实上,console类就是个静态类,他的所有成员都是静态的,永远不能创建一个Console的实例,使他在整个应用程序中被共享。对比静态成员和实例成员,在下面的代码中,实例字段Name属于特定的Panda实例,而静态字段Population属于所有的Panda实例:
  17. public关键字:public关键字把成员公开给其他类。把成员标记成为public就是在说:“这是我想让其他类看到的”
  18. 在C#中,兼容类型的实例可以相互转换。转换可以使隐式也可以是显示转换,如:
    1. 隐式转换只有在以下条件满足的情况下可以相互转换:

      1. 编译器能保证转换总能成功。
      2. 没有信息在转换中丢失。

              显示转换满足以下条件:

                    1.编译器不能保证总是能成功。

                    2.信息在转换过程中有可能丢失。

  19. 值类型和引用类型:所有的C#类型可以分成以下的几类
  20. 值类型:包含大多数预定义类型(具体包括所有数值类型、char类型、bool类型)以及自定义struct类型和enum类型。
  21. 引用类型包含大多数类、数据、委托、接口类型
  22. 值类型和引用类型最根本的区别在于他们在内存中的处理方式。
  23.  下面讨论栈和堆的含义,也就是讨论C#的两种类据类型值类型和引用类型;

    虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型。

      引用类型如:string,Object,class等总是在从托管堆上分配的,C#中new操作符返回对象的内存地址--也就是指向对象数据的内存地址。

      以下是值类型与引用类型的表:

      

  24.  值类型:值类型变量或者常量的内容仅仅是一个值。例如:C#预定义int的内容是32位数据。

  25. 可以通过struct关键字定义一个自定义值类型:
  26. 对值类型实例的赋值操作总是会复制这些实例。
  27.   引用类型引用类型比值类型复杂,它是由两部分组成:对象和对象的引用(变量名)。引用类型变量或者常量的内容是对一个包含值得对象的引用。下面举例

  28. 给引用类型赋值是只复制了引用,而不是一个对象的实例。这允许了不同的变量指向同一个对象,而值类型通常不可能存在这种问题,如果现在Point是一个类,我们重复之前的例子,那么对x的操作就会影响到Y的值了。
  29. NULL一个引用可以赋值为字面值“null”,这表示他不指向任何对象:
  30. 存储开销值类型实例正好占用需要存储其字段的内存。例如,Point要占用8字节的内存:yu
  31. 预定义类型分类:C#预定义类型有:

 

 

---恢复内容结束---

原文地址:https://www.cnblogs.com/muyuqianshan/p/6648181.html