美文网首页
2019-12-17 C#总结

2019-12-17 C#总结

作者: 萱草的时间 | 来源:发表于2019-12-17 16:33 被阅读0次

    类实例化
    在使用类的非静态方法或属性时,必须将类实例化。把类比做盖房的图纸,如果要使用房子的功能,如住人,得有真实存在的房子实体才行,所以要想使用房子的功能,需要把图纸转化为房子实体,这个过程就称为实例化过程。
    在使用类的静态方法或属性时,不用将类实例化。我想使用图纸上房子的长宽高时,我不必先建一座房子才能知道或使用它的长宽高,我可以直接把值从图纸上拿出来使用,只要是这个值,建的房子的长宽高都一样,所以就不需要实例化了,此种情况长宽高就为静态属性/方法。

    值类型与引用类型
    一个类型要么是值类型,要么是引用类型。区别在于数据存储的方式:对于值类型,数据存放在栈里。对于引用类型,引用存放在栈里而实际数据存放在堆里。

    引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。 对于引用类型,两个变量可引用同一对象;因此,对一个变量执行的操作会影响另一个变量所引用的对象。 对于值类型,每个变量都具有其自己的数据副本,对一个变量执行的操作不会影响另一个变量。

    集合
    集合包含三种:List IDictionary(KeyValue) IEnumable(枚举、foreach遍历)

    ??运算符
    op1 ?? op2
    op1 == null ? op2 : op1

    ?.运算符
    使用?.运算符,会把int? count设置为null,而不是抛出一个异常。

    System.Collections.Generic名称空间
    这个名称空间包含用于处理集合的泛型类型,使用得非常频繁,所以用using语句配置它,这样使用时就不必添加限定符了。

    default关键字
    public MyGenericClass()
    {
       innerT1Object = default(T1);
    }
    其结果是,如果innerT1Object是引用类型,就给它赋予null值;如果它是值类型,就给它赋予默认值。对于数字类型,这个默认值是0;而结构根据其各个成员的类型,以相同的方式初始化为0或null。default关键字允许对必须使用的类型执行更多操作,但为了更进一步,还需要限制所提供的类型。

    封箱就是将值类型转换为引用类型,拆箱就是将引用类型转换为值类型。
    例子:

    //封箱
    int num = 5;
    object obj=i;
    //拆箱
    int numChai = (int)obj;
    

    这里创建了一个int型的变量num,把5赋值给它,然后把它封箱在object类型的变量obj中。以这种方式封箱变量而创建的对象,包含值类型变量的一个副本的引用,而不包含源值类型变量的引用。要进行验证,可以修改源结构的内容,把对象中包含的结构拆箱到新变量中,检查其内容,即拆箱。
    拆箱的值必须和它要转换的目标的变量有相同的类型。

    ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示声明该参数为ref/out形式。两者都可以使函数传回多个结果。
    两者区别:
    两种参数类型的设计思想不同,ref的目的在于将值类型参数当作引用型参数传递到函数,是函数的输入参数,并且在函数内部的任何改变也都将影响函数外部该参数的值;而out的目的在于获取函数的返回值,是输出参数,由函数内部计算得到的值再回传到函数外部,因此必须在函数内部对该参数赋值,这将冲掉函数外部的任何赋值,使得函数外部赋值毫无意义。

    相关文章

      网友评论

          本文标题:2019-12-17 C#总结

          本文链接:https://www.haomeiwen.com/subject/hctenctx.html