1.C#简介

Wesley13
• 阅读 431
/*
 .NET Framework的含义
 .NET Framework是Microsoft为开发应用程序而创建的一个具有革命意义的平台
 尽管.NET Framework的Microsoft版本运行在Windows系统上,但以后将推出运行在其他操作系统上的版本
 例如mono,他是.NET Framework的开源版本包含C#编译器,该版本可以运行在几个操作系统上包括linux和mac os
 另外还可以在PDA类设备和一些智能电话上使用Microsoft .NET Framework Compact Framework,使用.NET Framework一个重要原因是它可以作为集成各种操作系统的方式
 可以使用.NET Framework创建Windows应用程序,web应用程序,web服务和其他各种类型的应用程序。
 对于web应用程序,按照定义它们是平台的应用程序,因为任何web浏览器的系统都可以访问它
 .NET Framework的涉及方式确保它可以用于各种语言,包括C#,以及C++,VB,JScript

 .NET Framework主要包含一个非常大的代码库,它可以在客户端语言中通过面向对象编程技术OOP来使用这些代码
 这个库可以分为多个不同的模块,这样就可以根据系统得到的结果来选择使用其中的各个部分
 还有一个模块包含web开发的代码块,一些模块还分为更具体的子模块,其目的是不同操作系统可以根据自己的特性,支持其中的部分或全部模块
 例如PDA支持所有的核心.NET功能,但不需要某些更高级的模块
 部分.NET Framework库定义了一些基本类型,类型是数据的一种表达方式,指定其中最基础的部分,以便使用.NET Framework在各种语言之间交互操作
 这叫做通用类型系统Common Type System CTS
 除了提供这个库意外.NET Framework还包含.NET公共语言运行库Common Language Runtime CLR,它负责管理用.NET库开发的所有应用程序的执行
 
  使用.NET Framework编写应用程序,就是使用.NET代码库编写代码,采用Visual Studio 2017编写代码
  为了执行C#代码,必须把他们转换为目标系统能够理解的语言,即本机代码,这种转换为编译代码,由编译器执行
  但在.NET Framework此过程包含两个阶段
      CIL和JIT
         在编译使用.NET Framework库的代码时,不是立即创建专用语操作系统的本机代码,而是把代码编译为通用中间语言
         Common intermediate Language CIL,这些代码并非专门用于任何一种操作系统,也并非专门用于C#,其他.NET语言
         可以在第一阶段编译为这种语言,开发C#应用程序时,这个编译步骤由VS完成
         显然,要执行应用程序,必须完成更多的工作,就是just-In-Time JIT编译器的任务,他CIL编译为专用于
         OS和目标机器结构的本机代码。这样OS才能执行应用程序,这里编译器的名称just-In-Time反映了CIL代码仅在需要时才编译的事实
         过去常常需要把代码编译为几个应用程序,每个应用程序都用特定的操作和CPU结构。这通常是一种优化形式
         例如为了让代码在AMD芯片组上运行的更快,而且有时是非常重要的例如工作在WIN9X和WINT/2000环境下的应用程序
         现在就不需要,因为JIT编译器使用CIL代码,而CIL代码是独立于计算机,操作系统和CPI之外的
         目前有集中JIT编译器,每种编译器都用于不同的结构,我们总能找到一个合适的编译器创建所需的本机代码
         这样就可以忽略于系统相关的细节,把注意力集中在代码的功能上就够了

     程序集
         在编译应用程序时,所创建的CIL代码存储在一个程序集中,程序集包括可执行的应用程序文件(.exe)
         和其他应用程序使用的库(.dll)
         除了包含CIL外,程序集还包含元信息即程序集中包含的数据的信息,也叫元数据和可选资源,元信息允许程序集是完全自描述的,
         不需要其他信息就可以使用程序集,也就是说,不会遇到下列情况:不能把需要的数据添加到系统注册表中,而这种情况在使用其他平台进行开发时常常出现
         因此部署应用程序就非常简单了,只需要把文件复制到远程计算机上的目录下即可,因为不需要目标系统上的其他信息
         ,所以只需要从该目录中运行可执行文件即可
         当然不必把运行应用程序所需要的所有信息都安装到一个地方,可以编写一些代码来执行多个应用程序所
         要求的任务,此时,通常把这些可重用的代码放在所有应用程序都可以访问的地方。
         在.NET Framework中,这个地方是全局程序集缓存Global Assenvly Cache GAC,把代码放在这个缓存中是很简单的
         ,只需要包含代码的程序集放在包含该缓存的目录即可

     托管代码
          在将代码编译为CIL,在用JIT编译器将它编译为本机代码后,CLR的任务还没有全部完成,还需要管理
          正在执行的用.NET Framework编写的代码这个执行代码的阶段通常叫做运行时runtime,即CLR管理着应用程序
          其方式是管理内存,处理安全性以及允许进行跨语言调试等,相反不收CLR控制运行的应用程序属于非托管类型
          某些语言如C++可以用于编写这类应用程序,例如访问操作的低级功能,但是在C#中,只能编写在托管环境下运行代码
          我们将使用CLR的托管功能,让.NET自己与操作系统记性交互

     垃圾回收
          托管代码最重要的一个功能是垃圾回收 garbage collection 这种.NET方法可以确保应用程序不再使用某些内存时
          就会完全释放这些内存,在.NET之前这项工作由程序员完成,代码中几个简单错误会把大块内存分配到错误的地方
          ,使这些内存神秘消失,这通常意味着计算机的速度逐渐变慢,最终导致系统崩溃
          .NET垃圾回收会定期检查计算机内存,从中删除不需要的内容,它不设置时间帧,可能一秒会进行上千次检查
          也可能几秒才检查一次,或随时检查,但一定会检查
          注意:在设计程序时在需要许多内存才能运行的代码应自己执行这样的检查,而不是坐等垃圾回收

     组合起来
         创建.NET应用程序步骤
         1.在使用某种.NET兼容语言C#编写应用程序代码
         2.把代码编译为CIL存储在程序集中
         3.在执行代码时如果这是一个可执行文件就自动运行,或者在其他代码使用它时运行,首先必须使用JIT编译器将代码编译为本机代码
         4.在托管的CLR环境下运行本机代码,以及其他应用程序或进程
         在上述过程还有一点需要注意,在2中编译为CIL的C#代码不一定包含在单独文件中,可以把应用程序代码
         放在多个源代码文件中,在把它们编译到一个程序集中,这个过程叫做链接,是非常有用的,原因是处理几个较小的文件
         比处理一个大文件要简单的多,可以把逻辑上相关代码分解到一个文件,以便单独进行处理,这也便于在需要时找到
         特定的代码块,让每个人编写一小块代码,而不会破坏已编写好的代码部分和其他人正在处理的部分
  C#的含义
      C#是可用于创建要运行在.NET CLR上的应用程序的语言之一,它从C/C++演化而来,是Microsoft专门为使用
      .NET平台而创建的
      使用C#开发应用程序比使用C++简单,因为语法简单,但是C#是一种强大的语言,在C++中能完成的任务几乎都能用C#完成
      C#带代码常比C++略长一些,因为C#是一种类型安全的语言,在外行人看来这表示一旦为某个数据指定了类型,就
      不能转换为另外一个不相关的类型,所以在类型之间转换时,必须遵守严格的规则,执行相同任务时,用C#编写的
      代码通常比用C++编写的代码长,但C#代码更健壮,调试起来更简单,.NET始终可以随时跟踪数据的类型,在C#
      中不能完成诸如把4字节的内存放在这个数据中,使之有10个字节长,并把它解释为X等任务,
      C#只是用于.NET开发的一种语言,C#优点,它是唯一彻头彻尾的为.NET Framework设计的语言,是在移植到其他操作系统上的
      .NET版本中使用的主要语言。


  C#能写什么样的应用程序
      Windows应用程序
      WEB应用程序
      WEB服务
  */
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这