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

    常量(const)总是静态的,不必也不允许增加static修饰符(但是有static效果)

    对象赋值是引用类型,两个对象指向同一个地址

    如果对象是一个引用,可以设置其值为null,表示它不引用任何对象,它不能调用任何非静态的成员函数或字段,否则会抛出异常。

    C#里基本类型都是值类型,复杂类型包括类都是引用类型,其中 string 和 object 是引用类型,struct 是值类型。

    但如果给string类型进行复制,则两个string对象会指向同一个地址,但如果改变其中一个string对象的值,则会在堆上为其重新分配一个新对象,这与一般的引用类型有所不同,需要注意,因为字符串是不可变的,只要字符串改变,就要为其分配新对象。

    bool类型和int类型不能隐式转换,将0或1赋值给bool类型将引发异常。

    switch...case中 case的值必须为常量表达式,即可以使用数值和字符串常量

    foreach 不能改变集合中各项的值,如果需要改变请使用for

    如果方法可以返回值,可以使用 return; 来结束方法

    可以通过 .ToString() 方法输出枚举的字符串形式,也可以通过字符串形式获取枚举值:TimeOfDay time2 = (TimeOfDay)Enum.Parse(typeof(TimeOfDay), "E_AFTERNOON", true);

    枚举值转换成int只需要强转就可以了。

    C#的 using 命令空间; 不同于C++的#include,前者是引入命令名间,只是方便后面代码书写一种简化写法,没有建立物理链接,后者是引入某个头文件,是物理链接,C#中没有类似的功能。

    命名空间的别名,using alias = namespace;  使用别名时,就要用::代替之前的.

    可以给Main函数传递字符串数组参数,形如: public static int Main(string[] args)

    关于C#编译

    C#的条件编译除了使用类似C++的预处理命令之外,还可以使用 Conditional 特性实现。

    将值类型作为参数传入函数,默认是按值传递,但可以使用 ref 关键字迫使值参数通过引用传送给方法,使用 ref 传递的变量必须先被初始化,同样功能的还有 out,唯一的区别就是传入的变量不需要先被初始化,所以非常适合用作输出参数。在调用函数时,ref 和 out 关键字都必须显式传递。

    命令参数与可选参数,可选参数是为参数提供默认值,但可选参数必须是方法定义的最后的参数,命令参数类似于python,在函数定义上没有区别,在调用时使用如下格式: get_user_by_userid(userid:100001); 命令参数的好处是可读性好,且可以以任意顺序传入参数。

    函数重载有两个限制:仅在返回类型上有区别的不能重载;不能仅根据参数是声明为 ref 还是 out 来区分。

    属性

    静态构造函数,醉了

    在构造函数中调用另一个构造函数,使用 this 关键字表示调用本类的其它构造函数,使用 base 关键字调用基类的构造函数

    readonly 成员只能在构造函数中修改。

    类是引用类型,结构是值类型,结构不支持继承,不能为结构定义无参的构造函数同,另外结构里不能在定义成员时就初始化,但在类中可以。

    弱引用允许垃圾回收器回收对象并释放内存,由于存在潜在的bug和性能问题,一般不会用这个功能,但特定情况下会使用。使用弱引用对象时,必须先判断该对象是否存在。WeakReference

    部分类:partial

    创建的类,如果没有指定基类,则默认继承Object类;结构都是继承自 System.ValueType,而System.ValueType继承自System.Object;

    结构总是派生自System.ValueType ,它们还可以派生自任意多个接口;类总是派生自System.Object或用户选择的另一个类,它们还可以派生自任意多个接口。

    扩展方法:如果不便修改某个类的源代码,又想扩展其功能,可以使用该方法。注意扩展方法的编写非常像静态方法,但在使用时和本类定义的普通成员方法没有区别。

    C#不同于C++,不支持多重继承,但支持多个接口。C#不支持私有继承。

    C#支持object关键字,它用作System.Object的假名,你就当它是宏定义好了。

    C#跟C++一样,定义虚函数需要使用virtual关键字显式指定,但与C++不同的是,C#要求在派生类的函数重写另一个函数时,要使用override关键字显式声明。当派生类定义一个与基类相同的签名方法时,且基类方法并没有使用virtual关键字,表明这是一个隐藏方法,C#可以使用 new 关键字来显式的修饰隐藏方法,如果不使用new关键字,编译会有警告。(不得不说,这些比C++要好。。。)

    抽象类使用abstract关键字指定,抽象类中的所有方法都是抽象方法,也需要使用abstract关键字指定,且不需要也不能使用virtual关键字再修饰了。抽象类只能被继承,不能被实例化。

    密封类和密封方法使用 sealed关键字修饰,修饰类时表示不能被继承,修饰方法时表示不能被重写。

    在泛型中,通过default关键字,可以将null赋予引用类型,将0赋予值类型。

    锯齿数组。

    Array是抽象类, Array array = Array.CreateInstance(typeof(int),5);

    SetValue    GetValue

    可空类型, int? i = null;

    空合并运算符

    Action委托和 Func委托都是一般的委托,本质上没有区别,只是为了在当作参数使用时更方便,不需要显式定义一个委托。其实更像是一个匿名委托吧。

    Action委托是不带返回值的,其模板参数都是表示函数参数类型;Func委托是带返回值的,其模板参数的最后一位表示返回值类型。

    事件只是在声明委托时加上 event 关键字,是一种特殊的委托,这种委托只能做为类成员,且只能在该类中调用,但可在类外注册该委托。一般的应用是,该类中的一个方法执行后,希望动态回调某些方法,那就在该方法中调用一个本类中定义的委托事件,然后在类外调用该方法前,使用合适的回调方法注册到这个委托中就好了。另外,事件委托的命名,最好是加上Event修饰。

    多播委托支持 +、-、+=、-= 操作符。

    匿名方法:优点是不必定义仅由委托使用的方法,尤其是在为事件定义委托时,非常明显,降低代码复杂性。匿名方法的替代方案就是 lambda 表达式。

  • 相关阅读:
    数据库之主表、从表、主键、外键
    eclipse编写js代码没有提示
    思维导图xmind的使用方法
    整理一下Apache与Tomcat的关系
    全栈开发者,一个很好的自学编程网站
    svn文件被锁不能提交的解决办法
    在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题
    php安装redis扩展
    PHP点击按钮拷贝
    PHP文件下载
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/4885324.html
Copyright © 2011-2022 走看看