zoukankan      html  css  js  c++  java
  • 基本概念

     

    概述

     

    两个规范

    CTS, Common Type System 通用类型系统

     

    CTS 包括

    1接口

    2值类型{基本类型,结构,枚举}

    3引用类型{类,装箱值类型,数组,委托}

     

    CLS, Common Language Specification 公共语言规范

     

    CLS定义了类型在运行时环境中创建和管理方式;

    CLS主要关注语言的互操作性

    解释:

    各种不同的语言(C#,VBJScript),经过编译后,都生成相同的MSIL语言

    可以为以下现像解释:

    C#语言可以转换成VB.NET语言

    VB.NET项目可以引用C#项目编译的DLL

     

    CLR

    CLR,Common Language Runtime 公共语言运行时

     

     

    JIT(just in time)编译器

    语言编译后生成MSIL语言

    MSIL(简做IL)

     

    虚拟机

    我们应该很熟悉Java虚拟机..

    一次编写代码,处处运行..当然也有人说一次编写,处处编译

     

    区域

    1堆栈

    2托管堆

     

    其它名词

    GC

    Garbase Collection 垃圾回收器

     

    回收器的执行时间:

    有两种方法可以实现

    1 运行一条线程,定时调用从而进行清理工作..清理的时机由线程根据多种条件考虑

    2 当新建对象时..即当你new class1()的时候..当然,并不是每次创建实例的时候,时机根据算法得出最佳时机进行清理..

     

    .netGC是使用的第二种方法..

     

    清理时的动作,当然GC只负责托管堆上的数据的清理

    因为类都是自我描述的(从类本身的记录就可知道他有没有被引用,当然自我描述不仅仅是指这个功能)

     

    发现有实例没有被引用时..就清理掉..

    并对较小的堆进行压缩,使用在托管堆中的顺序连续.这样使用调用速度度加快.

    C++里则是用链接来实现,当距离远时,检索时间成为一种小小浪费

     

    但对大堆不进行压缩..因为对大堆的数据复制成为一种浪费

     

    在进行回收操作时,会暂停应用程序

    GAC

    Global Assembly Cache 全局程序集缓存

     

    一些结论

    1 所有实体都是对象

     因为所有的类型都是继承于System.Object

    2 值类弄是处处留副本,引用类型只有一个在托管堆里..

      可参看例子..

     

    总结

     

     

     

    数据类型

    Dotnet的数据类型,IL的数据类型,CTS的类型分类

    CTS只语言的设计标准..一般不常讨论..

    .net的数据类型在不同的语言中表示又不相同..

    这里我们讨论具体语言类型的时候都默认到C#的语言类型..

     

    值类型

     

    .net的值类型分为:基本类型,用户定义的值类型,枚举类型.

     

    值类型都隐式地继承System.ValueType, System.ValueType是引用类型

    值类型到处留副本..

     

    所以有这样的结论:

    大的值类型会减慢对象的内万分配,管理

     

    结构是值类型

     

    结构与类的区别,结构是简化了的类

     

    1.结构至少要声明一个字段或事件

    2结构自动拥有一个默认的无参构造函数。如果试图定义自己的无参构造函数,

    编译器就会生成一个错误。这个构造函数用来执行所声明的字段的默认初始化。

    数值字段初始化为0,布尔标记初始化为false,而对象引用设置为null*

    不能定义自己的无参构造函数,但可提供带参数的构造函数。

    3不能在结构中提供字段的初始化程序,必须在构造函数中执行初姑化(这和类不

    同,类可以在声明时初始化字段)。但可以在定义时初始化const字段。

    4结构不可以有析构函数,但可实现Dispose方法..

    5不允许继承结构,不能被继承;能实现接口

     

     

    面像对像开发规则有一条:

    对变量定义为私有来最大化封装.

           public class Class1

           {

                  private string userName;

                  public string UserName

                  {

                         get{return userName;}

                         set{userName=value;}

                  }

           }

    我们常听说这样便于维护如何理解?

    如果你看过Asp.net Starter kits里的IssueTracker中对UserControl的操作..就知道怎么用的了.

    举个例子..

    假设有十五个页面调用了Class1,现在老板要求存储到数据库的Name必需加密

    怎么办?十五个页面一个一个地修改?

    只需在Class1里的Set 处理一下即可

    set{ userName= Encrypt.MD5(value) ;}

    对这条规则的透彻理解是检验是一条线..

     

     

     

    Class1 c1 = new Class1()

    在栈上分配一块内存给c1,在托管堆上建立一个Class1的区域(设为A)..并将c1的引用指向A.

     

     

    枚举

    枚举是值型

    可用于枚举的类型有int short long byte

    枚举是强类型的(不允许用整型值赋予枚举实例(强制可以,但不考虑其是否有效,都接收),必须使用成员名称..)

     

     

     

     

    引用类型

     

     

    1类有静态构造函数,只可有一个无参静态构造函数.

     2

     

    数组

     

    很久前写的
    本来想搞清楚static方法调用和一般方法有什么区别
    就查了些概念

    参考书目
    C#设计手册
    高级.net程序设计

     

  • 相关阅读:
    如何使用Arrays工具类操作数组
    Java 内存模型详解
    HashSet源码分析:JDK源码系列
    在ASP.NET Core中用HttpClient(六)——ASP.NET Core中使用HttpClientFactory
    在ASP.NET Core中用HttpClient(五)——通过CancellationToken取消HTTP请求
    在ASP.NET Core中用HttpClient(四)——提高性能和优化内存
    ASP.NET Core与Redis搭建一个简易分布式缓存
    在ASP.NET Core中用HttpClient(三)——发送HTTP PATCH请求
    在ASP.NET Core中用HttpClient(二)——发送POST, PUT和DELETE请求
    在ASP.NET Core中用HttpClient(一)——获取数据和内容
  • 原文地址:https://www.cnblogs.com/day/p/416152.html
Copyright © 2011-2022 走看看