C#入门

刨析Helloworld 程序

  1. 类(水蓝色)

C#完全面向对象的语言

类的首字母要大写

  1. 名称空间的标记{}

使用全限定名 System.Console.WriteLine

注意类名的冲突,精确的类名放到指定的namespace

如何确定某个类属于哪个类属于哪个名称空间

  1. Ctrl+.

  2. 检索 class

  1. 类库的引用 (物理基础)

  1. Dll引用(黑盒引用,无源代码)

    Add Reference -> using namespace

    有依赖关系

    写程序时尽量减少依赖关系

    Assemblies: 程序集,装配件

  • NuGet 简介

  1. 项目引用(白盒引用,有源代码

    Add new project-> class Library->add reference -> add ShardProjects -> using namespace

    bugroutcause

  • 依赖关系

  1. 类(或对象)之间的耦合关系

  2. 优秀的程序追求高内聚,低耦合

  3. UML(通用建模语言 )类图

1.      (Class)是现实世界事物的模型

类是对现实世界事物进行抽象所得到的结果

  • 事物包括物质(实体)与运动”(逻辑)

  • 建模师一个去伪存真,由表(interface)及里(隐藏的)的过程

    唯物辩证法

2.     类与对象的关系

对象也叫实例,是类经过实例化后得到的内存的实体

依照类,我们可以创建对象,这就是实例化

使用new操作符进行实例化

3.     引用变量与实例的关系

他们之间的关系就像孩子与气球;

  1. 气球(实例)不一定有孩子(引用变量)牵着

  2. 有小孩,但是不牵着气球

  3. 多个孩子可以使用各自的绳子牵着气球

  4. 也可以都通过一根绳子牵着气球(ref参数修饰符)

4.     类的三大成员

  • 属性(Property

    存储数据,组合起来表示类或者对象当前的状态

    高富帅(Personclass 身高属性,财产属性,相貌属性)

  • 方法(Method

    C语言中的函数(Function)进化而来,表示类或者对象“能做什么”

    工作中90%的时间是在与方法打交道,因为它是真正做事构成逻辑的成员

  • 事件(Event

    类或对象通知其他类或对象的机智,为C#所特有的

    善用事件机制非常重要

5.     使用MSDN文档


static voidCreateMyForm()

{

   // Create a newinstance of the form.

   Form form1 = newForm();

   // Create twobuttons to use as the accept and cancel buttons.

   Button button1 = newButton ();

   Button button2 = newButton ();

   // Set the text ofbutton1 to "OK".

   button1.Text = "OK";

   // Set theposition of the button on the form.

   button1.Location = newPoint (10, 10);

   // Set the text ofbutton2 to "Cancel".

   button2.Text = "Cancel";

   // Set theposition of the button based on the location of button1.

   button2.Location

      = newPoint (button1.Left, button1.Height + button1.Top + 10);

   // Set the captionbar text of the form.  

   form1.Text = "MyDialog Box";

   // Display a helpbutton on the form.

   form1.HelpButton = true;

   // Define theborder style of the form to a dialog box.

   form1.FormBorderStyle =FormBorderStyle.FixedDialog;

   // Set theMaximizeBox to false to remove the maximize box.

   form1.MaximizeBox = false;

   // Set the MinimizeBoxto false to remove the minimize box.

   form1.MinimizeBox = false;

   // Set the acceptbutton of the form to button1.

   form1.AcceptButton = button1;

   // Set the cancelbutton of the form to button2.

   form1.CancelButton = button2;

   // Set the startposition of the form to the center of the screen.

   form1.StartPosition =FormStartPosition.CenterScreen;

   // Add button1 tothe form.

   form1.Controls.Add(button1);

   // Add button2 tothe form.

   form1.Controls.Add(button2);

   // Display theform as a modal dialog box.

   form1.ShowDialog();

}

某些特殊类或对象在成员方面侧重点不同

  • 模型类或者对象重在属性(存储数据),如EntityFramework

  • 工具类或对象重在方法(搞计算),如MathConsole

  • 通知类或对象重在事件(),如各种Timer

     

静态成员与实例成员

  • 静态(Static)成员在语义上表示它是“类的成员”(类与生俱来的)

<静电,物体固有的性质>

  • 实例(非静态)成员在语义上表示它是“对象的成员”(成员是属于某个对象的而不是类)

    <身高:实例; 平均身高:静态>

  • 绑定(Binding)指的是编译器如何把一个成员与类或对象关联起来(早绑定:编译器编译时已经知道一个方法是属于某个类还是类的对象; 晚绑定是运行时决定, 晚绑定的语言是动态语言)

  • .”操作符: 成员访问操作符

     

    For + Tab

    Cw + Tab*2

    构成C#语言的基本元素

    • 关键字(Keyword):构成一门编程语言的基本词汇,是人类自然预言的费城小的子集

    • 操作符(Operator):运算符,表达运算思想的符号

    • 标识符(Identifier):给变量,类,类成员取得名字

    1. 有效标识符:不能以数字开头,不能是关键字,如果要用关键字需要加@ 可以以字母(中文,英文)或_开头

    2. 命名规范: 类: 名词; 属性: 名词; 方法:动词,动词短语

    3. 大小写规范:驼峰命名: myVariable(变量名);pasco : MyVariable(类,方法)

    • 标点符号 :不表达运算思想,不参与运算 {}

    • 文本(字面值):

    • 整数: int x=2(32bit); long y = 3L(64bit)

    • 实数(小数):  float x=3.0F(32bit);  double y =4.0D(64bit)

    • 字符: char c= ‘A’;

    • Z字符串:string str = “a”/”Hello”/””;

    • 布尔: bool b=true; bool b2= false

    • 空: string str= null;

      NullReferenceException

      --------

      标记(Token:对于编译器来说有意义的标识

      --------

    • 注释与空白

      单行: //

      多行(块注释)/*  … */



    什么是类型(Type


    又名数据类型(Data Type


    数据类型是性质相同的值的集合,配备了一系列具体的操作


    1. 是数据在内存中存储的型号

    2. 小内存容纳大尺寸数据会丢失精确度,发生错误

    3. 大内存容纳小尺寸会导致浪费

    4. 编程语言的数据类型与数据的数据类型不完全相同


    硬盘(外存):扩展存储器<静态的程序在硬盘里,动态的程序在内存里>


    强类型语言(C#)与弱类型语言(C)的比较


    C#对弱类型语言的模仿:Dynamic


    类型在C#中的作用:

    一个C#类型中包含的信息有:

    1. 存储词类型变量所需的内存空间大小

    2. 此类型的值课表示的最大最小的范围

    3. 此类型所包含的成员(如方法,属性,事件等)

    4. 此类型由何基类派生而来

    5. 程序运行时,此类型的变量在分配在内存的什么位置

    • Stack简介: 栈方法调用(比较小)

    • Stack overflow

    • Heap简介: 堆(比较大)<实例分配在堆里的>

    • 使用Performance Monitor查看进程的堆内存使用<perfmon>

    • 关于内存泄漏

    此类型允许的操作(运算


    C#语言的类型系统:

    C#的五大数据类型

    1. (Class):Window,Form, Console, String 声明和定义类

    2. 结构体(Structures): Int32,Int64, Single, Double  <Struct>

    3. 枚举(Enumerations): 限定用户只能从指定集合中拿数据<Enum>

    4. 接口(Interfaces)

    5. 委托(Delegates)

    变量,对象与内存

    什么是变量

    1. 表面上看(从C#代码的上下文上来看),变量的用途是存储数据

    2. 实际上,变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值能够存入变量

    3. 变量总共有7

      静态变量,实例变量(成员变量,字段),数组元素,值参数,引用参数,输出形参,局部变量

    1. 侠义的变量指局部变量,因为其他种类的变量都有自己的约定名称

      简单的讲,局部变量就是方法体(函数体)里声明的变量

    2. 变量的声明

      有效的修饰符的组合(opt)数据类型 变量名(名词) 初始化器(opt

      Public static int a =0;

      变量=以变量名所对应的内存地址为起点,以其数据类型所要求的存储空间为长度的一块内存区域

    值类型的变量

    1. byte/sbyte/short/ushort为例

    2. 值类型没有实例,所谓的实例与变量合二为一

    • 负数(按位取反再加1

    • 8位存储在高地址(高高低低原则)

    • 引用类型变量装的是实例的地址

      引用类型的变量与实例

      1. 引用类型变量与实例的关系:引用类型变量里存储的数据是对象的内存地址

        局部变量是在stack上分配内存,实例在堆上分配内存

        变量的默认值 (本地变量必须要与显示的初值)

        常量(值不可改变的变量)

        装箱与拆箱(Boxing& Unboxing

        装箱:

        Int x=100;

        Object obj =x;

        把栈值类型的值类型的值封装成object类型的实例放在堆上。

        copy然后再对内存上找一块地方,把堆内存的地址存在obj里面

        拆箱:

        Inty=(int) obj;

        从堆上面object类型的实例里面栈上搬东西


      方法的由来

      • 方法(method)的前身是C/C++语言的函数(function

      • 方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数

      • 当一个函数以类的成员出现时即为方法

      • 永远都是类(或结构体)的成员

      • C#语言中函数不可能独立于类(结构体)之外

      • 只有作为类(结构体)的成员时才被称为方法

      ·        C++中是可以得,成为全局函数


      • 是类(结构体)最基本的成员之一

      • 最基本的成员只有两个——字段与方法(成员变量与成员函数),本质还是数据+算法

      • 方法表示类(结构体)能做什么事情

      • 为什么需要方法和函数

      • 目的1:隐藏复杂的逻辑

      • 目的2:把大算法分解为小算法

      • 目的3:复用代码(reuse,重用)

      自顶向下,标准求精:面向过程

      方法的声明与调用

      • 声明方法的语法详解

      • 声明定义不分家

      • Parameter 全称为“formal parameter”

      • 形式上的参数,简称形参

      • 形式参数:要进入函数体进行跑龙套,在形式上编译通过

      • Parameter 是一种变量

      • 命名规范

      • 大小写规范

      • 需要以动词或者动词短语作为名字

      • 重温静态(Static)方法和实例方法

      • 调用方法:

      • Argument中文C#文档的翻译为实际参数,简称实参

      • 可以理解为调用方法时的真实条件

      • 个数,形式都要匹配,声明(形参)和调用方法(实参)要分清楚

        • 调用方法时的argument列表要与定义方法时的parameter列表相匹配

        • C#是强类型语言,argument是值,parameter是变量,值与变量一定要匹配,不然编译器会报错



        构造器(一种特殊的方法)

        • 构造器(constructor)是类型的成员之一

        • 构造器没有返回值类型;

        • 有带参数的构造器,默认构造器将不再起作用

        • Ctor+ Tab*2


        方法的重载(Overload

        • 声明带有重载的方法:

        • 方法签名(method signature)由方法的名称,类型参数的个数和它的每一个形参(按从左到右的顺序)的类型和种类(值,引用ref或输出out)组成。方法的签名不包含返回值类型

        • 实例构造函数签名由它的每一个参数(按从左到右的顺序)的类型和种类(值,引用ref或输出out)组成

        • 重载决策(到底调用哪一个重载):用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。

        如何对方法进行debug

        • 设置断点(breakpoint

        • 观察方法调用时的call stack

          栈的深度表示内存的使用越多

        • Step-inF11:进入方法体), Step-over(F10:不进入函数体内),Step-outshift+F11):直接返回调用的当前函数的方法中去

        • 观察局部变量的值与变化

          红色表示变化

        操作符概览

        ·        操作符(Operator)也称为运算符

        • 操作符是用来操作数据的,被操作的数据称为操作数(Operand

        操作符的本质

        • 操作符的本质是函数(即算法)的简记法

        • 操作符不能脱离与它关联的数据类型

          可以说操作符就是与固定的数据类型相关联的一套基本算法简记法

          示例:为自定义数据类型创建操作符

        操作符的优先级

        • 可以使用圆括号提高被括起来的表达的优先级

        • 圆括号可以嵌套

        • 只有圆括号

        同级操作符的运算顺序

        • 除了带有赋值功能的操作符,同优先级操作符都是由左向右

        • 带有赋值功能的操作符的运算顺序是由右向左

        • 与数学运算不同,计算机语言的同优先级的同优先级运算没有结合律

          各类操作符的示例

          基本操作符:

          1. .操作符(成员访问操作符)

          • //1. 访问外层名称空间的子集名称空间

          • //2. 访问名称空间中的类型

          • //3. 访问类型的静态成员

          • //4. 访问对象的成员

          1. 方法调用操作符()

          1. 元素访问操作符[]








猜你喜欢

转载自blog.csdn.net/johnny_timmy/article/details/80495511