C #简介

C#简介

C# 的发音为“C Sharp”,是一门由微软开发并获得了 ECMA(欧洲计算机制造商协会)和 ISO(国际标准组织)批准的现代的、通用的、面向对象的编程语言。

C# 由 Anders Hejlsberg 及其团队在.Net Framework的开发过程中开发,属于 .Net Framework 的一部分,可以用来编写 .Net 应用程序。C# 是专为 CLI (公共语言基础结构)设计的,CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。

在这里插入图片描述

C# 之所以能称为一门被广泛应用的编程语言,原因有以下几点:

  • C# 是一种现代的通用的编程语言;
  • C# 是面向对象的;
  • C# 是面向组件的;
  • C# 简单易学;
  • C# 是一种结构化语言;
  • 使用 C# 开发效率很高;
  • C# 可以在各种计算机平台上进行编译;
  • C# 是 .Net Framework 的一部分

借助 C# 编程语言,我们可以开发不同类型且安全可靠的应用程序,例如:

  • 桌面应用程序;
  • 网络应用程序;
  • 分布式应用程序;
  • Web 服务应用程序;
  • 数据库应用程序等。

.NET Framework

.NET Framework是微软公司推出的完全面向对象的软件开发与运行平台。.NET Framework具有两个主要组件:公共语言运行时(Common Language Runtime, CLR)和类库。
公共语言运行时:公共语言运行时(CLR)负责管理和执行由.NET编译器编译产生的中间语言代码。由于共语言运行库的存在,解决了很多传统编译语言的一些致命缺点,如垃圾内存回收、安全性检查等。
类库:类库我们比较好理解,就好比一一个大仓库里装满了工具。类库里有很多现成的类,可以拿来直接使用。例如,文件操作时,可以直接使用类库里的IO类。

编译

C#语言是一种编译型语言,它的编译过程包括以下几个步骤:

  1. 语法分析(Parsing):C#源代码在被编译之前,需要进行语法分析,将源代码转换成语法树。语法分析器会检查源代码是否符合C#语言的语法规范,如果有语法错误,则会发出编译错误提示。
  2. 语义分析(Semantic analysis):在语法和词法分析完成后,编译器会进行语义分析,检查源代码是否符合C#语言的语义规范。语义分析器会检查变量的类型、作用域、函数调用等等,如果存在语义错误,则会发出编译错误提示。
  3. 代码优化(Code optimization):在语义分析完成后,编译器会进行代码优化,使生成的目标代码更加高效和优化。代码优化包括删除死代码、常量折叠、函数内联等等。
  4. 代码生成(Code generation):最后一步是代码生成,编译器会将优化后的中间代码转换成目标代码(通常是机器码),并将目标代码输出到磁盘上的可执行文件中。
    这些步骤中的前三个是编译过程中最为重要的部分,它们保证了程序的正确性和可靠性,同时也为后面的代码优化和生成提供了必要的信息。

VisualStudio 安装

教程: https://blog.csdn.net/weixin_45788237/article/details/132023191?spm=1001.2014.3001.5502

创建C#工程

开始使用 -> 创建新的项目 -> 模板选择:C#控制台应用(.net framework) -> 创建

第一种方式:
在这里插入图片描述
第二种方式:

在这里插入图片描述

解决方案和项目的关系
  1. 解决方案和项目都是VS提供的用于管理应用程序的容器
  2. 一个解决方案可以包含一个或多个项目
  3. 这些项目可以利用解决方案 连接在一起 统一编译统一更新

项目目录

  1. bin

bin目录用来保存项目生成后程序集,它有Debug(调试版本)和Release(发布版本)两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。

在添加引用时,.NET会记录添加的引用绝对路径,这些设置保存在“每用户”文件中,(Solution.csproj.user),可以通过记事本打开查看。也可以在:项目属性—>通用属性—>引用路径里面查看。如果设置复制到本地为true,在生成项目时会自动拷贝该DLL到项目生成文件夹中(bin目录),否则不会拷贝。在生成项目时,对所添加的引用的是绝对路径,而在运行时程序集默认只在当前所在的路径下去找。要修改引用的路径,必须通过编程的方法去实现。使用References 对象。

在bin\debug\目录中有两个文件,除了要生成的.exe或.dll文件外,还有个.pdb文件,这个.pdb文件中就记录了代码中的断点等调试信息。一般移植或者打包程序只需要Debug文件即可,里面包含.exe文件、.dll文件、.ini文件、.xml文件、.pdb文件、.lib文件、.config、.manifest文件、.png文件、.gif文件、.cur文件、自定义文件夹等。

在\bin\release\目录下只有一个.exe或.dll文件,Release模式下不包含调试信息,并对代码进行了优化。

  1. obj

obj目录是用来保存每个模块的编译结果,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。是否采用增量编译,可以通过:项目属性—>配置属性—>高级—>增量编译来设置。

obj这个目录,在开发过程中可能会打乱乱,比如你的一个引用的dll,更新了,然后你在vs开发环境里面重新删除后,又重新引用,或者直接更新引用了。因为每次编译时默认都是采用增量编译的原因,所以,这个时候,不论你点多少次编译,你会疑惑,明明是更新引用了,为什么新更新的那些函数和接口不存在,这个时候,你可以手工吧obj目录都删除掉一下,然后重新引用下,就可以正确的看到你更新的那些接口和函数了。
这个事实说明,obj在开发过程中,也是会被引用到的,并不只是在编译的时候起作用。

都可以删掉,
重新编译又生成了

  1. Properties

Properties文件夹 定义程序集的属性 项目属性文件夹 一般只有一个 AssemblyInfo.cs 类文件,用于保存程序集的信息,如名称,版本等,这些信息一般与项目属性面板中的数据对应,不需要手动编写。
  .cs 类文件。源代码都写在这里,主要就看这里的代码。
  .resx 资源文件,一些资源存放在这里,一般不需要看。
  .csproj C#项目文件,用VS打开这个文件就可以直接打开这个项目,自动生成,不需要看。
  .csproj.user 是一个配置文件,自动生成的,会记录项目生成路径、项目启动程序等信息。也不需要看。
  .Designer.cs 设计文件,自动生成,不需要看。
  .aspx 是网页文件,HTML代码写在这里面。
  .sln:在开发环境中使用的解决方案文件。它将一个或多个项目的所有元素组织到单个的解决方案中。此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合
  *.sln:(Visual Studio.Solution) 通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中。
  比如是生成Debug模式,还是Release模式,是通用CPU还是专用的等

打开项目的方式

在这里插入图片描述

在这里插入图片描述

如何启动项目

多个项目选择一个

在这里插入图片描述

项目基本结构

//命名空间:可以看作是一个范围,用来标注命名空间中类的归属
//using 关键字,用来引入指定的命名空间,他可以告诉编译器后面的代码中我们需要用到某个命名空间
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//namespace 命名的名称 定义一个命名空间(划分一个代码块)
namespace _1._2_项目基本结构
{

    //创建一个类 Program是类的名称,类中通常用来存放程序中要使用的数据和函数(方法)
    //类:可以理解为现实生活中的一个类别(比如: 人类  动物类   汽车类.....)
    internal class Program
    {
        //格式:static void 方法名(){}  创建一个方法
        //static (静态):是将Main方法声明为静态
        //void(空返回):是将Main方法声明为静态,是应用程序的入口
        //Main(方法名):使用方法名() 就可以调用函数
        //string[] args:用来接收命令行传入的参数 string[] 是声明 args的数据类型(可以存储字符串数组)
        //这个Main方法,每一个应用程序都至少有一个,是整个应用程序的入口,所有的应用都是从Main方法开始执行的
        static void Main(string[] args)
        {
            
            //点击启动的时候,会执行这里面的代码
          //在控制台输出一段内容
          Console.WriteLine("项目的基本结构");
          Console.WriteLine("第二个打印");
          new test1.Student().say();
          new test2.Student().say();


            //Console.ReadLine() 是针对用户的,它会使程序进入等待状态状态,等待用户输入之后,程序继续运行
            //之所以在这里写这行代码,是因为命令行窗口会在程序结束后自动关闭,这会导致我们输出的内容一闪而过,加入此行代码,可以避免这种情况
            //在控制台输入一段内容
            Console.ReadLine();
        
        }
    }
}
//一个命名空间中类与另一个命名空间中同名的类,互不冲突,但是在同一个命名空间中,类的名称必须是唯一的
namespace test1
{
    class Student
    {
        public void say()
        {
            Console.WriteLine("test1命名空间下的say函数");
        }

    }
  
}

namespace test2
{
    class Student
    {
        public void say()
        {
            Console.WriteLine("test2命名空间下的say函数");
        }
    }
  
}

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值