C# 教程
C# 教程
近日开始了C#的学习,粗略来看与Java语法差不多,但是又有很多不同,在这里记录一下学习的内容,本人根据官网教程学习,如有错误请帮忙指出,谢谢。
C#环境设置
在学习之前第一步是设置开发环境,官网提供了以下备选方案之一:
使用.NET CLI
使用所选的文本或代码编辑器,参阅.NET教程Hello World 10分钟入门,或直接看以下记录。
下载并安装
下载完成之后直接安装,检车所有安装正确,安装完成之后,打开一个新的命令提示符并运行以下命令:
> dotnet
如果安装成功会提示以下内容:
Usage: dotnet [options]
Usage: dotnet [path-to-application]
Options:
-h|--help Display help.
--info Display .NET information.
--list-sdks Display the installed SDKs.
--list-runtimes Display the installed runtimes.
path-to-application:
The path to an application .dll file to execute.
创建一个新的应用
使用如下命令创建应用
dotnet new console -o myApp
这些命令什么意思?
- 该
dotnet new cconsole
命令创建一个新的控制台程序。 - 该
-o
参数创建一个名为myApp您的应用程序储存位置的目录,并使用所需文件填充该目录
然后进入到新创建的目录
cd myApp
在myApp目录中有一个主文件Program.cs,默认情况下,他已经包含了"Hello World!"所需要的代码。
using System;
namespace myApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
如果您收到类似于 的消息Template "Console Application" could not be created. Access to the path 'C:\Windows\System32\myApp' is denied.
,请将当前目录更改为您有权创建新文件夹的目录,然后再次尝试运行该命令。
运行应用
使用如下命令运行应用:
dotnet run
在 Visual Studio 中创建一个简单的 C# 控制台应用程序
创建项目
创建C #项目,项目类型随附了所需的全部模板文件,无需添加任何内容!
- 打开Visual Studio 2019.
- 在"开始"窗口上,选择创建新项目
- 在“创建新项目”窗口中,从”语言“列表中选择”C #“。接下来,从平台列表中选择”Windows“,然后从”项目类型“列表中选择”控制台“。
应用语言、平台和项目类型筛选器之后,选择”控制台应用“模板,然后选择”下一步“。
备注
如果未看到“控制台应用程序”模板,则可以通过“创建新项目”窗口安装该模板 。 在“找不到所需内容?”消息中,选择“安装更多工具和功能”链接 。
“创建新项目”窗口内“找不到所需内容”消息中的“安装更多工具和功能”链接
然后,在 Visual Studio 安装程序中,选择“.NET Core 跨平台开发”工作负载。
Visual Studio 安装程序中的 .NET Core 跨平台开发工作负荷
之后,在 Visual Studio 安装程序中选择“修改”按钮 。 系统可能会提示你保存所有内容;如果出现提示,请按照指示进行操作。 接下来,选择“继续”,以安装工作负载 。 然后,返回到“创建项目”过程中的步骤 2。
在“配置新项目”窗口中,在“项目名称”框中键入或输入“Calculator”。 然后,选择“下一步”。在“配置新项目”窗口中,将项目命名为“Calculator”
在“附加信息”窗口中,应已为目标框架选择“.NET Core 3.1” 。 如果未选择,则请选择“.NET Core 3.1”。 然后,选择“创建”。
Visual Studio 随即打开新项目,其中包含默认的“Hello World”代码。
C # 类和成员
作为面向对象的语言,C#支持封装、继承和多态这些概念。
类和对象
类 是最基本的 C# 类型。 类是一种数据结构,可在一个单元中就将状态(字段)和操作(方法和其他函数成员)结合起来。 类为类实例(亦称为“对象”)提供了定义 。 类支持 继承 和 多形性,即 派生类 可以扩展和专门针对 基类 的机制。
新类使用类声明进行创建。 类声明以标头开头。 标头指定以下内容:
- 类的特性和修饰符
- 类的名称
- 基类(从基类继承时)
- 接口由该类实现。
标头后面是类主体,由在分隔符 { 和 } 内编写的成员声明列表组成。
申明一个Point类:
class Point
{
public int x { get; }
public int y { get; }
public Point(int x, int y) => (x, y) = (x, y);
}
类实例是使用 new
运算符进行创建,此运算符为新实例分配内存,调用构造函数来初始化实例,并返回对实例的引用。 以下语句创建两个 Point
对象,并将对这些对象的引用存储在两个变量中:
var p1 = new Point(10,4);
var p2 = new Point(15, 8);
类型参数
泛型类定义类型参数。 类型参数是用尖括号括起来的类型参数名称列表。 类型参数跟在类名后面。 然后,可以在类声明的主体中使用类型参数来定义类成员。 在以下示例中,Pair 的类型参数是 TFirst 和 TSecond:
public class Pair<TFirst, TSecond>
{
public TFirst first { get; }
public TSecond second { get; }
public Pair(TFirst first, TSecond second)
{
this.first = first;
this.second = second;
}
}
声明为需要使用类型参数的类类型被称为 泛型类类型。 结构、接口和委托类型也可以是泛型。 使用泛型类时,必须为每个类型参数提供类型自变量:
var pair = new Pair<int, string>(1, "two");
int i = pair.First; // TFirst int
string s = pair.Second; // TSecond string
基类
类声明可以指定基类。在类名和类型参数后面加上冒号和基类的名称。省略积累规范与从object类型派生相同,在以下实例中,Point3D
的基类是Point
在第一个示例中,Point
的基类是object:
class Point3D:Point
{
public int z { get; set; }
public Point3D(int x,int y,int z) : base(x, y)
{
z = z;
}
}
类继承其基类的成员。 继承意味着一个类隐式包含其基类的几乎所有成员。 类不继承实例、静态构造函数以及终结器。 派生类可以在其继承的成员中添加新成员,但无法删除继承成员的定义。 在上面的示例中,Point3D 从 Point 继承了 X 和 Y 成员,每个 Point3D 实例均包含三种属性(X、Y 和 Z)。
可以将类类型隐式转换成其任意基类类型。 类类型的变量可以引用相应类的实例或任意派生类的实例。 例如,类声明如上,Point 类型的变量可以引用 Point 或 Point3D:
Point a = new Point(10, 20);
Point b = new Point3D(10, 20, 30);
接口
接口定义了可由类和结构实现的协定。 接口可以包含方法、属性、事件和索引器。 接口通常不提供所定义成员的实现,仅指定必须由实现接口的类或结构提供的成员。
接口可以采用 多重继承。 在以下示例中,接口 IComboBox 同时继承自 ITextBox 和 IListBox。
interface IControl
{
void Paint();
}
interface ITextBox : IControl
{
void SetText(string text);
}
interface IListBox : IControl
{
void SetItems(string[] items);
}
interface IComboBox : ITextBox, IListBox { }
类和结构可以实现多个接口。 在以下示例中,类 EditBox 同时实现 IControl 和 IDataBound。
class EdutBox : IControl, IDataBound
{
public void Paint()
{
throw new NotImplementedException();
}
}
枚举
public enum SomeRootVegetable
{
HorseRadish,
Radish,
Turnip
}
[Flags]
public enum Seasons
{
None = 0,
Summer = 1,
Autumn = 2,
Winter = 4,
Spring = 8,
All = Summer | Autumn | Winter | Spring
}