• C# 高级编程(笔记1)


    第三章

    1.方法重载不能仅根据方法的返回值类型来区分, 即:参数个数和参数类型都相同,只是函数的返回值不同,是不能作为函数的重载的

    2.结构的构造函数  

    为结构定义构造函数的方式与为类定义构造函数的方式相同,但不允许定义无参数的构造函数,因为编译器总是为其提供一个无参数的默认构造函数,它是不允许替换的。  

    结构中字段的初始值不能绕过默认构造函数,也就是必须在构造函数中完成初始化,且不能是无参构造函数  

    结构是值类型,不支持继承,结构中的new运算符与类和其他引用类型的工作方式不同。new运算符 并不分配堆中的内存,而是只调用相应的构造函数,根据传送给它的参数来初始化所有的字段。

    stFuct Dimensions 
    {  
        pub1ic double Length; 
        pub1ic double  Width; 
    } 
    
    Dimensions point = new Dimensions(); 
    point.Length = 3; 
    point.width = 6;

    结构是会影响性能的值类型,但根据使用结构的方式,这种影响可能是正面的,也可能是负面的。

    a.正面的影响

       为结构分配内存时,速度非常快,因为它们保存在栈中。在结构超出了作用域被删除时,速度也很快。

    b.负面影响

       只要把结构作为参数来传递或者把一个结构赋予另一结构(如A=B,其中A和B是结构),结构的所有内容就被复制,而对于类,则只复制引用。这样就会有性能损失,根据结构的大小,性能损失也不同。注意,结构主要用于小的数据结构。但当把结构作为参数传递给方法时,应把它作为ref参数传递,以避免性能损失【此时只传递了结构在内存中的地址,这样传递速度就与在类中的传递速度一样快了。但如果这样做,就必须注意被调用的方法可以改变结构的值】。

    3.静态类

      类中只包含静态的方法和属性,且不能为静态类创建类的实例

    4.扩展方法

      是静态方法,只能在一个静态类中扩展需要扩展的方法,如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法。类中已有的任何实例方法优先。

    5.静态构造函数

      编写静态构造函数的一个原因是,类有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性,注意,静态构造函数没有访问修饰符,其他C#代码从来不调用它,但在加载类时,总是由.NET 运行库调用它,所以像public 或 private这样的访问修饰符就没有任何意义。出于同样原因,静态构造函数不能带任何参数,一个类也只能有一个静态构造函数。很显然,静态构造函数只能访问类的静态成员,不能访问类的实例成员。

    6.只读字段(readonly)   

    private readonly Int32 MaxLength = 52; //声明时可以赋值,还可以在构造函数里赋值,其他地方不能为其赋值

    7.匿名类型 var与new关键字一起使用时,可 以创建匿名类型。匿名类型只是一个继承自Object且没有名称的类。该类的定义从初始化器中推断, 

    var captain = new { Firstlame = "Janes", MiddleName = "T", LastName = "Kirk" };
  • 相关阅读:
    ES 分组排序java实现
    java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
    Java 虚拟机对锁优化所做的努力
    Docker 核心概念、安装、端口映射及常用操作命令,详细到令人发指。
    20条最最常用的Linux命令讲解
    Linux查看系统配置常用命令
    全面认识Docker和基本指令
    25个深度学习开源数据集
    Docker 简单运用
    一小时学会C# 6
  • 原文地址:https://www.cnblogs.com/notebook2011/p/2969353.html
Copyright © 2020-2023  润新知