zoukankan      html  css  js  c++  java
  • C#编程基础

    1.NETC#

    A、.NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。

    B、C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。

    2.NET能做什么?

    A、桌面应用程序 WinForm。

    B、Internet应用程序 ASP.NET。

    C、手机开发 WP7。

     

    3IDE

    A、Visual Studio 用于开发WinForm、ASP.NET Web应用程序、XML、WEB Service、移动应用程序。

    B、Visual Studio2002 对应.Net1.0

       Visual Studio2003 对应.Net1.1

       Visual Studio2005 对应.Net2.0

       Visual Studio2008 对应.Net3.x

       Visual Studio2010 对应.Net4.x

    C、MSCN的全称是Microsoft Developer Network。这是微软公司面向软件开发者的一种信息服务。

    4Visual Studio介绍

    A、解决方案中可以包含多个项目,项目中可以包含多个程序文件。

    B、.cs文件的基本结构,命名空间包含类,类包含方法。

       Using System; –>引用命名空间

       Namespace Dragon –>定义一个Dragon的命名空间

       {

           Class Program –>定义一个Program的类

           {

                Static void Main(string[] args) –>定义一个方法Main

                {

                }

           }

       }

    C、重置开发环境:工具->导入和导出。

    D、Main方法是程序的入口。

    E、.sln是解决方案文件;.csproj是项目文件;.cs是类文件。

    F、显示行号:工具->选项->所有语言。

    G、当解决方案下建多个项目时,需要注意启动项设置。

    H、当解决方案下建多个项目时,编译和运行可以考滤使用卸载与加载功能。

    I、C#中的注释:单行注释//;多行注释/**/;文档注释///。

    J、折叠一段代码#region; #endregion。

    5、变量

    A、变量的声明: 类型 变量名;

    B、变量的赋值: 变量名 = 值;

    C、声明多变量: 类型 变量名,变量名1…N。

    注: 变量须要先声明再赋值,然后使用

    6、变量命名规则

    A、变量名必须以字母开头。

    B、变量名只能由字母、数字和下划线组成,而不能包含空格、标点符号、运算符等其它符号。

    C、变量名不能与C#中的关键字名称相同。

    D、变量名不能与C#中的库函数名称相同。

    E、大小写敏感。

    7C#数据类型

    A、C#里面的数据类型分为两种:值类型和引用类型。这两者有很大的区别,其中值类型变量直接保存变量的值,引用类型的变量保存的是数据的引用地址。

    值类型包括简单值类型和复合型类型。简单值类型可以再细分为整数类型、字符类型、实数类型和布尔类型;而复合类型则是简单类型的复合,包括结构(struct)类型和枚举(enum)类型。

    整数类型

    数据类型

    说明

    取值范围

    对应System程序集结构

    sbyte

    有符号8位整数

    -128-127

    SByte

    byte

    无符号8位整数

    0-255

    Byte

    short

    有符号16位整数

    -32768-32767

    Int16

    ushort

    无符号16位整数

    0-65535

    UInt16

    Int

    有符号32位整数

    -2147489648-2147483647

    Int32

    uint

    无符号32位整数

    0-42994967295

    UInt32

    long

    有符号64位整数

    -263-263

    Int64

    ulong

    无符号64位整数

    0-264

    UInt64

    字符类型

    C#中采用Unicode字符集来表示字符类型。一个Unicode字符16位长。

    实数类型

    数据类型

    说明

    取值范围

    float

    32位单精度实数

    1.5*10-45-3.4*1038

    double

    64位双精度实数

    5.0*10-324-1.7*10308

    demcimal

    128位十进制实数

    1.0*10-28-7.9*1028

    布尔(bool)类型

    取值只能是ture或者false,bool类型对应于.NET类库中的System.Boolean结构。它在计算机中占4个字节,即32位存储空间。

    结构类型

    把一系列相关的信息组织成为一个单一实体的过程,这就是创建一个结构的过程。

    struct person

    {

    string m_name;    //姓名

    int m_age;        //年龄

    string m_sex;      //性别

    }

    枚举类型

    主要用于表示一个逻辑相关联的项和组合。使用关键字enum来定义。

    enum Weekday

    {

    Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

    }

    B、引用类型

    引用类型包括类(class)、接口(interface)、委托(delegate)和数组(array)。

    类(class)

    类是一组具有相同数据结构和相同操作的对象集合。创建类的实例必须使用关键字new来进行声明。

    注意: 类和结构之间的根本区别在于:结构是值类型,而类是引用类型。对于值类型,每个变量直接包含自身的所有数据,每创建一个变量,就在内存中开辟一块区域;而对于引用类型,每个变量只存储对目标存储数据的引用,每创建一个变量,就增加一个指向目标数据的指针。

    接口(interface)

    应用程序之间要相互调用,就必须事先达成一个协议,被调用的一方在协议中对自己所能提供的服务进行描述。在C#中,这个协议就是接口。接口定义中对方法的声明,既不包括访问限制修饰符,也不包括方法的执行代码。

    注意: 如果某个类继承了一个接口,那么它就要实现该接口所定义的服务。也就是实现接口中的方法。

    委托

    委托用语封装某个方法的调用过程。

    委托的使用过程分为3步:

    1.定义      delegate void HelloDelegate();

    2.实例化    HelloDelegate hd = new HelloDelegate(p1.Say); //p1.Say调用的方法

    3.调用      hd();

    数组

    数组主要用于同一数据类型的数据进行批量处理。在C#中,数组需要初始化之后才能使用。

    如:int[] array1 = new int[3]{2,3,5};

        int[] array1 = {2,3,5};

    注意: 对规则多维数组,调用Length属性所得的值为整个数组的长度;而调用其GetLength方法,参数为0时得到数组第1维的长度,为1时得到数组第2维的长度,以此类推。而对于不规则多维数组,调用Length属性和以0为参数调用其GetLength方法,得到的都是第一维的长度。

    C、类型转换

    数值转换

    数值的转换有一个原则,即从低精度类型到高精度类型通常可以进行隐式转换;而从高精度类型则必须进行显式转换。

    如:int i = 100;

            long j = 1000;

            j = i;        //隐式转换,由低精度到高精度的转换

            i = (int)j;     //显式转换,有高精度到底精度的转换

    具体转换过程中信息的丢失就看各数据类型的精度了。(可以参考上面数据类型)

    枚举转换

    枚举类型与其他任何类型之间不存在隐式转换。而和枚举类型相关的显式转换包括:

    1.从所有整数类型(包括字符类型)和实数类型到枚举类型的显式转换;

    2.从枚举类型到所有整数类型(包括字符类型)和实数类型的显式转换;

    3.从枚举类型到枚举类型的显式转换。

    装箱和拆箱转换

    主要是值类型与引用类型之间相互转换。

    如:object obj 1= 10;

              int i = (int)obj;       //拆箱

              int j = 100;

    object obj2 = j;             //装箱

    转换检查

    如果出现转换失败,程序就会抛出一个System.InvalidCastException异常。

    8C#运算符

    C#可以分为一下几类:算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、其他运算符。

      1、算数运算符   +  - * / %    加、减、乘、除、取余

      2、赋值运算符  = ,+=, -= ,*=, /= , %=, &= ,|= , ^= ,>>=, <<=.

      3、关系运算符  > ,<,>=,<=,==,!=.

      4、逻辑运算符 !,&&,||.

      5、位运算符  按位取反~,按位与&,按位或|,左移<<,右移>>,按位抑或^

      6、条件运算符  ?和:组成,用于三元表达式。

      7、其他运算符

      字符串连接符+;

      () 类型转换运算符   将一种数据类型强制转换成另外一种数据类型

      is运算符 检查对象是否与给定类型兼容;

      as 运算符用于在兼容的引用类型之间执行某些类型的转换,类似于强制转换操作.注意,as 运算符只执行引用转换和装箱转换. as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用强制转换表达式来执行;

      sizeof运算符,获得值类型数据在内存中占用的字节数;

      new运算符,用于创建对象和调用对象的构造函数;

      true运算符   返回布尔值 true 表示真,否则返回 false;

      false运算符 返回布尔值 true 表示假,否则返回 false;

      typeof ,用于获得一个对象的类型;

      checked 和unchecked,用于控制整数算术运算中当前环境的溢出情况.

      优先级

      基本(其他运算符)>一元>乘除>加减>移位>关系>等式>按位与>按位抑或>按位或>逻辑与>逻辑或>条件>赋值

    9C#转义字符

    ·一种特殊的字符常量;

    ·以反斜线""开头,后跟一个或几个字符。

    ·用可以看见的字符表示那不可以看见的字符, 如' '表示换行

     

    常用的转义字符及其含义:

    ’ 单引号

    ” 双引号

    \ 反斜杠

    a 警告(产生峰鸣)

     退格

    f 换页

    tab键

    换行

    回车

    水平制表符

    v 垂直制表符

    c#里@的作用就应该是忽略转义字符的作用

    在C#中,"c:\temp"表示路径是c: emp; 而@"c: emp"就表示c: emp;

    10C#注释方式

    1、//单行注释

    2、/*  */多行注释

    3、///

    ///文本注释

       ///

    11try catch捕获运行时错误

    A、try

    {

    //可能出错的代码

    }

    Catch

    {

    //出错后的动作

    }

    B、Exception对象捕获运行时错误的具体信息。

    12if语句

    A、if基本语法:

           if (条件)

                  语句;

    B、if-else

    if (条件)

    {语句1;}

    Else

    {语句2;}

    C、if-else if

    If(条件1)

    {语句1;}

    else if(条件2)

    {语句2;}

    else if(条件N)

    {语句N;}

    else

    {语句3;}

    13switch case

    switch (表达式)

    {

     case 值1:

      语句块1

      break;

     case 值2:

      语句块2

      break;

     ...

     default :

      语句块N

      break;

    }

    14、三元表达式

    表达式1?表达式2:表达式3;

           ?号之前的表达式1为布尔条件表达式,如值为真(true)则执行表达式2,如值为假(false)则执行表达式3。

    15while

    A、while

    while(条件)

    {

           循环体;

    }

    B、do while

           Do

           {

                  循环体;

           }

           While(条件);

    16for

    For(表达式1;表达式2;表达式3)

    {

        循环体;

    }

    17break, continue

    break是跳出当层循环。continue开始循环的一次新迭代。

        return语句就是用于指定函数返回的值。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!

    18、程序调试

    A、设置断点

    B、单步运行

    C、观察变量

    19、常量、枚举

    A、常量的定义

           const 类型 常量名 = 值;

    B、枚举

           enum 名称

    {

    值1,….值N

    };

    20、结构

    struct 结构名

    {

           定义结构成员

    }

    21、数组

           数据类型[] 数组名 = new 类据类型[数组长度];

           数据类型[] 数组名 = {1,2,3}

    22、方法(函数)

           定义:函数就是将一块代码进行重用的一种机制。

           语法:

           [修饰符] [类型] 返回值类型 方法名([参数列表])

           {

                  方法体;

           }

          

           访问修饰符:

           public    可以被外部成员调用

    internal   可以在当前项目调用

    protected  只能在被类的成员和该类的子类调用

    private    只能在被类的成员调用(默认级别)

          

           类型:

           override、virtual、static、abstract、sealed

    重载函数、虚拟函数、静态函数、抽象函数、密封函数(不可派生)

          

           virtual关键字表明这个成员可以在派生类中被重写。

           override关键字表示要重写基类虚拟成员的意图。要重写虚方法或抽象方法,必须声明使用override关键字。不能重写非虚方法或静态方法。 重写的基方法必须是 virtual、abstract 或 override 的。重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称。

           static静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。 使用static关键字的方法可以不用实例化而直接使用。

           abstract 修饰符指示所修饰的内容缺少实现或未完全实现。 abstract 修饰符可用于类、方法、属性、索引器和事件。 在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。 标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。抽象类的在在主要是为了继承,不能创建抽象类的实例。包含一个或多个抽象成员的类必定也是抽象的。

           sealed密封类不能被继承。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed 修饰符必须始终与override一起使用。

          

           参数列表:

           ref修饰参数,说明是引用的传递,也就是说在函数中对参数的操作会改变原来的值;out修饰参数,是说这个参数可以不被初始化,但在函数中一定要有赋值的语句。

    调用:

    1、如果是静态方法(static),使用 类名.方法();

           注意:

    1、  方法定义在类中。

    2、  若有返回值,方法体中必须包含return语句。

    3、  若没有返回值,则使用void声明一个函数。

    23、修饰符、访问级别

    A、修饰符

    修饰符

    用途

    访问修饰符

    public

    private

    internal

    protected

    protected internal

    指定声明的类型和类型成员的可访问性。

    访问不受限制。

    访问仅限于包含类型。

    访问仅限于当前程序集。

    访问仅限于包含类或从包含类派生的类型。

    访问仅限于当前程序集或从包含类派生的类型。

    abstract

    指示某个类只能是其他类的基类。

    const

    指定无法修改字段或局部变量的值。

    event

    声明事件。

    extern

    指示在外部实现方法。

    new

    从基类成员隐藏继承的成员。

    override

    提供从基类继承的虚拟成员的新实现。

    partial

    在整个同一程序集中定义分部类和结构。

    readonly

    声明一个字段,该字段只能赋值为该声明的一部分或者在同一个类的构造函数中。

    sealed

    指定类不能被继承。

    static

    声明属于类型本身而不是属于特定对象的成员。

    unsafe

    声明不安全的上下文。

    virtual

    在派生类中声明其实现可由重写成员更改的方法或访问器。

    volatile

    指示字段可由操作系统、硬件或并发执行线程等在程序中进行修改。

    B、访问级别

    一个成员或类型只能有一个访问修饰符,使用 protectedinternal 组合时除外。

    命名空间上不允许使用访问修饰符。命名空间没有访问限制。

    根据发生成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。

    不嵌套在其他类型中的顶级类型的可访问性只能是 internal 或 public。这些类型的默认可访问性是 internal。

    嵌套类型是其他类型的成员,它们可以具有下表所示的声明的可访问性。

    属于

    默认的成员可访问性

    该成员允许的声明的可访问性

    enum

    public

    class

    private

    public

    protected

    internal

    private

    protected internal

    interface

    public

    struct

    private

    public

    internal

    private

    24static修饰符

    A、变量:static修饰的变量,可以直接使用。

    B、方法:不需用new方法,可以直接通过 类名.方法()调用。

    static方法:可以调用static方法,不能调用非static方法。非static方法可以调用static方法。

    C、静态类,不能被new的类就是静态类。

    23、方法的重载

    通过使用相同的方法名称,不同的参数类型,构成重载。

          

    24、面向对象

    A、面向对象(Object Oriented,OO)是软件开发方法。

    B、面向对象的几个概念:类是对相同事务的抽象;对象是具体的某个东西。如按钮是类,某个按钮就是对象。对象可以叫做类的实例(instance)。字段field是某个对象的变量,方法method是类执行的一些动作。

    C、类的继承,类之间有继承关系。继承的关系:父类(parent)、基类(base)、子类(child)。

    D、面对象的特性:封装、继承、多态。

    25、定义类

    A、修饰符 class 类名{}

    26、属性property

    A、属性是方法的一种。

    B、属性的访问器包含与获取(读取或计算)或设置(写)属性有关的可执行语句。访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。set访问器包含一个隐藏的参数value,该参数包含从客户代码传送过来的值.

    C、充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。

    -设计原则:属性封装了对域的操作。把要访问的域设为private,通过属性中的get和set操作对域进行设置或访问。

    D、语法: 

    [访问修饰符] 数据类型 属性

    {

    get{ };

    set{ };

    }

    27、对象的引用

    A、int、datetime、bool、char等属于值类型ValueType。

    B、对象的引用则是传递引用。

    28、构造函数

    A、当类或结构创建时,其构造函数调用。构造函数与选件类或结构相同,并且,它们通常用于初始化新对象的数据成员。

    B、不带参数的构造函数称为“默认构造函数”。 无论何时,只要使用 new 运算符实例化对象,并且不为 new 提供任何参数,就会调用默认构造函数。

    C、除非类是 static 的,否则 C# 编译器将为无构造函数的类提供一个公共的默认构造函数,以便该类可以实例化。

    29、继承

    A、类可以从其他类中继承。这是通过以下方式实现的:在声明类时,在类名称后放置一个冒号,然后在冒号后指定要从中继承的类(即基类)。

    B、新类(即派生类)将获取基类的所有非私有数据和行为以及新类为自己定义的所有其他数据或行为。因此,新类具有两个有效类型:新类的类型和它继承的类的类型。

    C、object是所有类的基类。

  • 相关阅读:
    .NET平台系列18 .NET5的超强优势
    .NET平台系列17 .NET5中的ARM64性能
    .NET平台系列19 新世界中的.NET大统一平台架构解析
    .NET平台系列16 .NET5/Asp.Net Core 在全球Web框架权威性能测试 Web Framework Benchmarks 中的吊炸天表现
    .NET平台系列15 .NET5的吊炸天性能改进
    .NET平台系列14 .NET5中的新增功能
    从零开始学Typescript-类型注解
    从零开始学Typescript-第一个TS程序
    从零开始学Typescript-安装Typescript
    从零开始学VUE-创建VUE应用
  • 原文地址:https://www.cnblogs.com/PBDragon/p/3559000.html
Copyright © 2011-2022 走看看