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

    命名空间下的类型可以为:Class、interface、delegate、struct、enum,不可以直接写变量和方法。

    除了一下差异,C#中的变量几乎和C++中一样:

    1、C#中的变量,总是需要你在访问前进行初始化,否则编译出错。

    2、不能在C#中访问一个“挂起”指针。

    3、超出数组边界的表达式索引值同样不可访问。

    4、C#中没有全局变量或全局函数,取而代之的是通过静态函数和静态变量完成。

    所有C#的类型都是从object类继承的。

    bool仅接受真、假而非任意整数。

    值类型:

    (在堆栈中分配的数据类型)

    1、除了字符串的所有基本和内建类型。

    2、结构。

    3、枚举。

    引用类型:

    (在堆中分配的数据类型,不再使用时,将自动进行垃圾清理。)

    1、类

    2、接口

    3、集合类型 如数组

    4、字符串

    枚举类型:

    enum Week { Monday, Tuesday, Wednesday};
    namespace test
    {
        using cs = Console;
    
        class Program
        {
            static void Main(string[] args)
            {
                Week week = Week.Monday;
                cs.WriteLine(week.ToString());
                cs.WriteLine((int)week);
                cs.WriteLine((Week)1);
    
                //获取字符串对应的枚举值
                cs.WriteLine((Enum.Parse(typeof(Week), "Wednesday", true)));//第三个参数表示是否忽略大小写
            }
        }
    }

    类与结构:

    1、类的对象在堆中分配,并使用关键字new创建。而结构在栈中进行分配。

    readonly:

    1、readonly仅用于修饰类的数据成员,改成员有了值后将不可再做修改,和const数据成员不同之处在于const要求声明时就初始化。

    sealed:

    1、sealed修饰的类不允许你从它继承任何类。sealed class name{}

    unsafe:

    1、你可以使用unsafe修饰符在C#中定义一个不安全上下文。在不安全上下文中,你可以插入不安全代码,如C++的指针等。

    public unsafe MyFun(int *pInt, double* pDou)

    {

      int* p = new int;...

    函数的参数

    输出参数:必须在方法的声明和调用中都使用out修饰符。

    1.在方法内部,输出参数在被读取之前必须被赋值。这意味着参数的初始化是无关的,而且没有必要在方法调用前为其赋值。

    2.每个输出参数在方法返回前必须被赋值。

    引用参数:必须在方法的声明和调用中都使用ref修饰符。

    实参必须是变量,在用作实参前必须被赋值。如果是引用类型变量,可以赋值为一个引用或NULL值。

    参数数组:必须在方法的声明中使用params修饰符。

    1.在一个参数列表中只能有一个参数数组。

    2.参数数组必须是列表中的最后一个

    声明参数数组:a.在数据类型前使用params修饰符。

                     b.在数据类型后放置一组空的方括号。

                         eg: void ListInts(params int[] inVals)

    函数的重载

    ● 两个方法不能仅在返回类型上有区别。
    ● 两个方法不能仅根据参数是声明为ref还是out来区分。

    栈帧

    当一个方法被调用时,在栈顶分配了一块内存用于保存一定数量与方法相关的数据项,这块内存叫方法的栈帧。

    栈帧保存的内容:

        1.返回地址--方法退出时在哪儿继续执行。

        2.分配内存的参数--就是方法的值参数

        3.与方法调用相关的其他各种管理数据项。

    方法被调用时,整个栈帧被压入栈中。

    方法退出时,它的整个栈帧被从栈中弹出。弹出一个栈帧有时也称为释放栈。

    接口:

    1、接口是只包含函数签名而在子类中实现的抽象基类。子类可实现多重接口(C#不允许对类进行多重继承,由此可实现多重继承)

    索引器:

    1、参数化成员属性:包含set、get方法。

    2、与成员属性不同:它可以接受1个或多个参数;使用this作为索引器的名字。

    3、语法:[访问修饰符] 数据类型 this[数据类型 标识符]

    4、索引器用于书写一个可以通过使用[]像数组一样直接访问集合元素的方法。CollectionBase是用于创建集合的类库。List是CollectionBase中用于存放集合列表的受保护成员。

    class Shape:CollectionBase

    {

        public void add(Shape sp)

        {

           List.Add(sp);

        }

        public Shape this[int idx]

        {

           get

           {

               return (Shape)List[idx];

           }

           set

           {

               List[idx] = value;

           }

        }

    }

    装箱、拆箱

      装箱的思想在C#中是创新的。正如前面提到的,所有的数据类型,无论是内建的还是用户定义的,都是从System命名空间的基类object继承的。所以基础的或是原始的类型打包为一个对象称为装箱,相反的处理称为拆箱。

    运算符

    is运算符:用于检查对象是否是给定类型,或是否可以转换成给定类型,返回布尔值。if(val is ClassA)...

    as运算符:功能如is,但返回null或已经转换的对象。

    语句

    foreach: 用于迭代数组等集合

    lock: 在线程中使代码块称为重点部分。lock关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放改锁。

    checked/unchecked:用于数字操作中的溢出检查。

    Switch:执行一条case语句后,程序流不能跳转到下一个case语句。 

    委托(delegate):

    让我们可以把函数引用保存在变量中。这就好比C++使用typedef保存函数指针一样。

    虚函数:

    需要使用ovverride关键字在子类中实现虚函数。

    使用new隐藏父类函数

    常用命名空间:

    System.Drawing     处理图形和绘图,

    System.Data        处理数据存储和管理,在定义ADO.NET技术中扮演重要                     角色

    System.IO          管理对文件和流的同步和异步访问

    System.Windows     处理基于窗体的窗口的创建

    System.Reflection  包含从程序集读取元数据的类

    System.Threading   包含用于多线程编程的类

    System.Collections 包含定义各种对象集的接口和类

    重载运算符

    可重载运算符:

    1.一元运算符:+, -, !, ~, ++,--,   true, false

    2.二元运算符:+, -,*,/,%,|,^,<<,>>

    3.比较运算符:==,!=,<,>,<=,>=

    如果重载了true和false运算符,就可以在布尔表达式中使用类,例如,if(opl){}。

  • 相关阅读:
    【LeetCode】46. 全排列(回溯)
    [P2894][USACO08FEB] 酒店Hotel (线段树+懒标记下传)
    [P2680][NOIP2015T6] 运输计划 (LCA+树上差分+二分)
    静态主席树学习笔记
    [P1941][NOIP2014T3] 飞扬的小鸟 (0/1背包+完全背包)
    [P1084][NOIP2012T6] 疫情控制 (二分+贪心+LCA)
    [P3959][NOIP2017T5] 宝藏 (状压DP+DFS)
    [P2679][NOIP2015T5] 子串 (DP+滚动数组)
    [P1314][NOIP2011T5] 聪明的质检员 (二分+前缀和)
    [P1966][NOIP2013T2] 火柴排队 (求逆序对+归并排序/树状数组)
  • 原文地址:https://www.cnblogs.com/wrbxdj/p/5857729.html
Copyright © 2011-2022 走看看