C#简介
c#是专门为.net框架设计的语言。运行环境是首先c#编译为中间语言(IL intermediate language),然后在.net运行时(CLR common language infrastructure)环境中执行,其中CLR提供了内存管理、异常处理、安全性等服务。
c#和.net被发明的目的:提供统一的跨平台的编程环境,加强不同语言不通操作系统之间的互操作性。
兼容语言:遵循CLI规范的编程语言。
CLI能让编写的代码能够在不同的环境中运行。
CTS:(common type system),是CLI的一个关键部分,比如说,遵循咧CLI的语言,一个用 C# 编写的类可以被 VB.NET 或其他 CLI 兼容语言使用。
元数据:描述程序结构的数据,比如,一个类的定义、方法的签名都是元数据。
C#不是解释性语言,他是先编译为IL,然后在有CLR通过JIT(just in time compiler)编译成机器代码,既有编译型语言的性能,又有解释型语言的灵活。
对于C#的跨平台能力,C#可以在windows、linux以及macos上运行无需更改代码。
总结 C#和.net是为了统一的编程环境和良好的跨平台能力而被研发,C#首先被编译为IL,然后IL由CLR通过JIT编译成机器代码。
.net框架
包括CLR和庞大的类库,组件不像c++中的类或代码片段,在.net中,通常是以类库的形式存在,提供了可重用的代码单元
C#环境配置
我们使用的是vscode通过ssh连到阿里云,我们使用的是linux进行开发,所以我们使用以下步骤来配置环境:
wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
然后安装依赖:
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-6.0
上述是6.0,下面是7.0
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-7.0
C#程序结构
包含如下
1.命名空间声明
2.一个class
3.class属性
4.一个main方法
5.语句&表达式
文件后缀为cs
下面是示例代码
using System;
namespace HelloWorldApplication
{
class HelloWorld
{
static void Main(string[] args)
{
/* 我的第一个 C# 程序*/
Console.WriteLine("Hello World");
Console.ReadKey();
}
}
}
编译这个程序
1.创建一个新的.net控制台应用程序项目
dotnet new console -n HelloWordApp -o HelloWordApp
dotnet new console用来创建新项目的命令,console指定项目模版类型,
-n HelloWordApp指定新项目的名称,在这里新项目被命名为HelloWordApp
-o 这里指定新项目的输出目录,
这里面的Program.cs是程序的入口函数Main的部分,然后我们直接在项目目录中dotnet run就ok了。
项目目录中还有一些文件和目录,obj和bin分别是中间文件和最终可执行文件的目录
.csproj是项目配置文件,里面包含了元数据和依赖项信息。
C#基本语法
示例代码
using System;
namespace RectangleApplication
{
class Rectangle
{
// 成员变量
double length;
double width;
public void Acceptdetails()
{
length = 4.5;
width = 3.5;
}
public double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}
class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
using System 允许您在代码中直接使用 System 命名空间中的类和方法。
namespace 用于组织相关的类,避免命名冲突。
每个 C# 程序都必须有一个 Main 方法作为程序的入口点,且 Main 方法必须位于某个类中。因为C#是面向对象编程不支持全局方法。
C#数据类型
值类型:就是一些c++的内置类型
引用类型:引用类型的变量存储的是对象的引用(即内存地址),其实很像指针。
引用类型内置的又分为对象类型、动态类型和字符串类型,然后可由用户自定义的有class、interface还有delegate。我们先说说引用内置类型
对象类型:是所有数据类型的终极基类,可以被分配任何其他类型。其中一个值转变为对象类型时称为装箱(boxing),对象类型转为值类型时称之为拆箱(unboxing)。
动态类型:有点类似于auto,但又不是,auto是在编译时确定了,而dynamic是在运行时确定的。
字符串类型:有点类似于const string。
string str = @"C:\Windows";
等价于
string str = "C:\\Windows";
C#类型转换
没啥说的,挺简单的,和C++很像,看见了再说吧
https://www.runoob.com/csharp/csharp-type-conversion.html
C#中的委托可以看作是函数指针
关于程序集,DLL、EXE
其中程序集就是编译后的代码逻辑单元,DLL或EXE是这些代码的物理表现。
Top comments (0)