zoukankan      html  css  js  c++  java
  • C#基本语法学习(二)

    1、面向对象思想有几个重要的特性:抽象(Abstraction)、封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。
      抽象就是对复杂的现实生活中的事物性质和行为进行筛选,选择其中对于将要开发软件有意义的信息,去掉无用的部分,最终建立起一个只描述现实事物一部分有用信息的软件对象。
      封装就是把内部数据和实现细节向使用者隐藏起来。封装有两个重要作用。首先,通过封装,对象对外所暴露的接口信息更加简单,从而使用者使用对象也更加容易。其次,通过封装,对象的使用者不知道对象的具体实现细节,从而杜绝了对象

      使用者与对象实现细节之间的紧耦合。
      继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。

      C#中只能实现单继承。
      多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

    2、C#中类的定义如下:
      [访问修饰符] class 类名
      {
        [变量定义]
        [方法定义]
        [属性定义]
        ....
      }
      类里面可以定义变量、方法和属性。类有一个访问修饰符,用于描述类的可见性。类里面还可以定义别的类,在一个类里面定义的类称为嵌套类或内部类。在大多数情况下类的修饰符只能是public或internal,

      只有嵌套类的访问修饰符可以为protected、protected internal或private。
      类也有静态类和非静态类之分。静态类在声明时前面有一个static关键字,静态类只能包含静态成员,而且不能创建静态类的实例。除此之外静态类与非静态类是相同的。

    3、构造函数是类的一种特殊方法。构造函数在形式和功能上都非常类似一个没有返回值的方法,总是在对象被创建的时候才执行。在其他地方没有方式调用。
      构造函数要注意两点:1、构造函数的名称必须与类名称相同,包括大小写;2、构造函数没有返回值,而且不允许用void显示说明没有返回值。
      当用new关键字创建一个类的实例时,构造函数就会被调用。构造函数的主要功能是对类进行必要的初始化。每个非静态类都必须至少有一个构造函数,这要类的实例才能被创建。
      C#中如果不为类声明任何构造函数,那么C#就会自动生成一个方法体为空的默认构造函数,如果声明了任何构造函数那么C#不会再自动生成默认的构造函数。

    4、对象实例化和使用,语法如下:
      变量名 = new 类名(构造函数参数);

    5、C#垃圾回收机制:C#中依靠公共语言运行时(Common Language Runtime,CLR)进行垃圾回收。当可用内存降低到某一阈值时,CLR会自动调用垃圾回收功能,对内存进行整理,回收无用的内存空间。
      在进行垃圾回收时首先要判断哪些内存仍在使用,哪些内存已经无用了。当声明一个类的变量并创建这个类的实例时,CLR将会为这个类分配一块内存区域,当这个变量超出作用域以后,相应的内存区域也就成为了无用的内存区域,

      这种内存区域应该在垃圾回收时被回收以重新使用。CLR通过判断内存是否可以通过变量引用而决定这块内存是否仍在使用。CLR将所有的内存引用分为两种,根引用和非根引用。根引用是指当前活动的局部变量和类的静态变量,

      非根引用通常是类的一个实例字段。如果一个内存区域能够直接或间接从一个跟引用访问到,那么这个内存区域就扔在使用中,反之就说明引用这块内存的变量已经超出作用域了,这块内存就无法访问了,应该被垃圾回收。

    6、析构函数,与构造函数相对应,是在对象被销毁时执行的函数。C#中类的析构函数名称是在“~”符号后面跟类的名称。如类名为Car,那么析构函数名称为~Car。
      C#中的析构函数是在对象被垃圾回收器回收之前执行。CLR要对一个对象进行回收时,首先检查这个对象有没有析构函数,如果有那么此次垃圾回收并不会释放对象的内存,而是把该对象放到析构队列中。

      CLR会创建一个专门的线程来调用析队列中的对象的析构函数。当对象的析构函数调用完以后,在下一次垃圾回收时,这个对象占用的内存才真正被回收。
      由于CLR是在内存低到一定程度时才进行垃圾回收,即进行垃圾回收的时间是不确定的,所以C#对象的析构函数执行的时间也是不确定的。不该把释放资源(如数据库连接、文件句柄等)放在析构函数中,

      否则这些资源将不能及时得到释放。释放资源的正确做法是在类里面写一个可被显示调用的清理资源的方法,然后再使用完对象后调用这个清理资源的方法。.NET Framewor中定义了一个IDisposable接口,

      其中包含一个Dispose方法,实现IDisposable和Dispose方法,是在C#中实现资源回收的一种常见方法。

  • 相关阅读:
    新新人加入博客园
    C#通过第三方组件生成二维码(QR Code)和条形码(Bar Code)
    关于delphi 类的属性定义property方法
    从XML文件乱码问题,探寻其背后的原理
    Clang RecursiveASTVisitor & ASTFrontendActions based on it
    Clang FrontendActions
    C++ 学习笔记
    Clang Preprocessor 类的创建
    世上最伟大的十个公式
    RestEasy+用户指南第5章.@PathParam
  • 原文地址:https://www.cnblogs.com/numbqq/p/5283763.html
Copyright © 2011-2022 走看看