• C#快速入门


     [学习笔记]

    一、简介

    1、C#是由Anders Hejlsberg和他的团队在.Net框架开发期间开发的;是.Net框架的一部分。

      C#是专为公共语言基础结构(CLI)设计的,CLI由可执行代码和运行时环境组成,允许在不同计算机平台和体系结构上使用各种高级语言。

    2、C#是大小写敏感的,每条语句都以 ; 结尾。程序执行从main开始,与Java不同的是,文件名可以不同于类名称;一个文件里可以有多个class;

    3、Console.Write()               打印,一次同时打印多个参数可用占位符{0}...类似于format,后边用逗号隔开依次要输入各位的参数;

    4、Console.ReadLine()   输入;

    5、Console.ReadKey()    等待按键;

    6、// 或者 /*...*/              注释

    7、hello world

     1 //hello world !
     2 using System; //使用系统命名空间
     3 namespace HelloWorldApplication //声明命名空间
     4 {
     5    class HelloWorld        //class声明
     6    {
     7       static void Main(string[] args)    /* main    方法 */
     8       {
     9          /* 我的第一个 C# 程序*/
    10          Console.WriteLine("Hello World");
    11          Console.ReadKey();
    12       }
    13    }
    14 }

    二、基础      

    1、数据类型

     1 bool          布尔值
     2 byte          8位无符号整数(0到255)
     3 char          16位Unicod字符
     4 decimal      128位精确的十进制值,28-29位有效数
     5 double      64位双精度浮点型
     6 float        32位单精度浮点型
     7 int         32位有符号整型
     8 long         64位有符号整型
     9 sbyte        8位有符号整型
    10 short        16位有符号整型
    11 uint         32位无符号整型
    12 ulong        64位无符号整型
    13 ushort      16位无符号整型            

    可用sizeof(type)方法来获取一个变量在特定平台上的准确尺寸;

    string                  字符串可用引号和@引导,用@引导时称作“逐字字符串”,此时转义字符会被当作普通字符处理,且可进行任意的换行和缩进处理;多个字符串可用+号连接

    type* name         指针类型

    dynamic              动态类型

    const                  常量

    nullable              可空类型(声明:<data_type> ? <variable_name> = null;合并运算符 ?? 用于定义可空类型和引用类型默认值,如果不为空则为??前边的值,如果给定值为空,则用??后边的默认值)

    2、数据类型转换

    显示类型转换(强制转换)

    double d = 1.23;
    int x;
    i = (int)d;

    3、内置类型转换方法

     1 ToBooolean    如果可能的话,把类型转换为布尔型
     2 ToByte        把类型转换为字节类型
     3 ToChar        如果可能的话,把类型转换为单个Unicode字符类型
     4 ToDateTime    把类型转换为时间结构
     5 ToDecimal     把浮点型或整数类型转换为十进制类型
     6 ToDouble     把类型转换为双精度浮点型
     7 ToInt16       把类型转换为16位整数类型
     8 ToInt32       把类型转换为32位整数类型
     9 ToInt64       把类型转换为64位整数类型
    10 ToSbyte       把类型转换为有符号字节类型;
    11 ToSingle      把类型转换为有符号字节类型
    12 ToString      把类型转换为字符串类型
    13 ToType        把类型转换为指定类型
    14 ToUInt16      把类型转换为16位无符号整数类型
    15 ToUInt32      把类型转换为32位无符号整数类型
    16 ToUInt64      把类型转换为64位无符号整数类型

    示例:

    int i = 5;
    i.ToSingle();
          
    string locstr = 123.ToString();
    //如果要将"locstr"转成整型数
    //方法一: 用 Convert 
    int i = Convert.ToInt16(locstr);
    //方法二: 用 Parse
    int ii = int.Parse(locstr);

    4、数据装箱与拆箱

    装箱(值类型转换为对象类型)

    int x = 8;
    object ob = x;

    拆箱(之前由值类型转换而来的对象类型再转回值类型)

    int x = 9;
    object ob = x;
    int y = (int)ob

    5、运算符

    算术运算符:+,-,*,/,%,++,--

    关系运算符:==,!=,>,<,>=,<=

    逻辑运算符:&&,||,!

    位运算符:&,|,^,~,<<,>>

    赋值运算符:=,+=,-=,*=,/=,%=,<<=,>>=,^=,|=

    其他运算符:

    sizeof()    返回数据类型的大小

    typeof()   返回class类型

    &                  返回变量的地址

    *                    变量的指针

    ?:                   条件表达式

    is                   判断对象是否为某一类型

    as                  强制转换,即使失败也不会抛出异常

    6、数组(Array)

    声明: datatype[] arrayName;

    初始化: double[] a = new double[10],可使用foreach来遍历数组:foreach (double i in a)

    C#支持多维数组;在定义一个新数组时[ ]也可以不给定个数。

    7、结构(struct)

    struct name
    {
        Access_Specifier type name
    }

    C#中结构与C或C++相比有以下特点:

    1)结构可带有方法、字段、索引、属性、运算符方法和事件;

    2)结构可定义构造函数,但不能定义析构函数;但也不能定义默认的构造函数;

    3)与类不同,结构不能继承其他结构或类的基础结构;

    4)结构可实现一个或多个接口;

    5)结构成员不能指定为abstract、virturl或protected;

    6)当使用New操作符创建一个结构对象时,会调用适当的构造函数来创建结构;但结构可不使用New操作符即可被实例化;

    7)如果不使用New操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使得;

    8、枚举(Enum)

    enum <enum_name>
    {
        enumeration list
    }

    默认枚举的第一个符号的值是0,但也可以自己指定每个符号的值。

    三、控制结构

    1、if...else语句

    if...else
    if(boolean_expression){
    }
    else if{
    }
    else{
    }

    2、switch语句

    switch(expression){
        case const-expression:
            statement(a);
            break;
        case const-expression:
            statement(b);
            break;
        default:
            statement(c);
            break;
    }

    3、while循环

    while(condition){
        statement;
    }

    4、do...while循环

    do{
        statement;
    }while(condition);

    5、for循环

    for(init;condition;increment){
        conditional code;
    }

    6、函数

    <Access Specifier> <Return Type> <Method Name>(Parameter List)
    {
        Method Body;
    }

     

    四、面向对象编程(Class)

    1、C#的封装

    public            所有对象都可以访问;

    private           对象本身在对象内部可以访问;

    protected       只有该类对象及其子类对象可以访问;

    internal          同一个程序集的对象可以访问;

    protected internal 一个程序集内的对象,或者该类对象及其子类可以访问;

    2、类的定义

    <access specifier> class class_name
    {
        <access specifier> <data_type> variable_name1;
        <access specifier> <data_type> variable_name2;
        ...
        <access specifier> <return_type> method1(parameter_list){
            body;
        }
        <access specifier> <return_type> method1(parameter_list){
            body;
        }
        ...
    }

    3、构造函数

    类的一个特殊成员函数,当创建类的新对象时执行;构造函数名称与类名称完全相同,但它没有任何返回类型。

    默认的构造函数没有任何参数,但也可以有参数,这种方法可以帮助在创建对象同时给对象赋初始值。

    4、析构函数:

    类的一个特殊成员函数,当类的对象超出范围时执行;

    析构函数的名称是在类的名称前加上一个 ~ 作为前缀,它不返回值,也不带参数;

    析构函数用于在结束程序之前释放资源。析构函数不能继承或重载;

    5、类的继承:

    class <derived_class> : <base_class>{

    }

    对于构造函数的继承需要在参数后加 : baseMethod(parameter_list)

    对于声明为sealed类为密封类,密封类不能被继承。

    C#不支持多重继承,但可以通过接口来实现。

    6、函数重载

    在同一个范围内对相同的函数名有多个定义,但函数的定义必须彼此不同,可以是参数类型不同,也可以是个数不同,但不能只有返回类型不同。

    7、动态多态性(抽象类和虚方法)

    使用abstract关键字创建抽象类,用于提供接口的部分类的实现。当一个派生类继承自该抽象类时,实现即完成;抽象类包含抽象方法,抽象方法可被派生实现;

    继承一个抽象方法时用override声明;

    不能创建一个抽象类的实例;

    不能在一个抽象类外部声明一个抽象方法;

    抽象类不能被声明为sealed。

    虚方法用virtual声明,在不同的继承类中有不同的实现,对虚方法的调用是在运行时发生的。

    8、运算符的重载

    在类中对运算符的重新定义,通过关键字operator+运算符 来定义的;

    只有算术运算符和比较运算符可以被重载。

    9、接口(interface)

    接口定义了所有类继承接口时应遵循的语法合同,定义了属性、方法和事件;接口使得实现接口的类或结构在形式上保持一致。

    接口使用interface声明,后边接接口名称即可。

    接口的继承和类一样,类继承接口时必须先在static void main()中实例一个当前的类,然后调用接口的方法,再实现接口的方法。

    附:

    1、命名空间(namespace)

    用于提供一种让一组名称与其他名称分隔开的方式。在同一程序内使用多个命名空间,在调用其他的类或方法时需用命名空间名后跟 . 进行定位区分。

    也可以使用using来提前命名空间。(using还可以用于给很长的路径起别名)

    命名空间可以进行嵌套。

    2、预处理器指令:

     1 #define        定义一系列成为符号的字符;
     2 #undef         取消定义符号;
     3 #if            测试符号是否为真; 
     4 #else          与#if一起使用;
     5 #elif          与#if一起使用;
     6 #endif         指定一个条件指令的结束;
     7 #line          修改编译器的行数及输出错误和警告的文件名;
     8 #error         允许代码的指定位置生成一个错误;
     9 #warning       允许代码的指定位置生成一级警告;
    10 #region        指定一个可展开或折叠的代码块;
    11 #endregion     与#region一起用,表示结束。

    补充提高内容:https://www.cnblogs.com/aland-1415/p/9347915.html

  • 相关阅读:
    RPC(简单实现)
    观察者模式
    自省(Introspector)
    Mybatis学习笔记
    Nginx
    AJAX跨域
    手写Tomcat
    监听器模式
    回调
    Temporal Segment Networks
  • 原文地址:https://www.cnblogs.com/aland-1415/p/7360509.html
Copyright © 2020-2023  润新知