C# 教程


近日开始了C#的学习,粗略来看与Java语法差不多,但是又有很多不同,在这里记录一下学习的内容,本人根据官网教程学习,如有错误请帮忙指出,谢谢。

C#环境设置

在学习之前第一步是设置开发环境,官网提供了以下备选方案之一:

使用.NET CLI

使用所选的文本或代码编辑器,参阅.NET教程Hello World 10分钟入门,或直接看以下记录。

下载并安装

下载.NET SDK(64位)

下载.NET SDK(32位)

下载完成之后直接安装,检车所有安装正确,安装完成之后,打开一个新的命令提示符并运行以下命令:

> 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 #项目,项目类型随附了所需的全部模板文件,无需添加任何内容!

  1. 打开Visual Studio 2019.
  2. 在"开始"窗口上,选择创建新项目
    在这里插入图片描述
  3. 在“创建新项目”窗口中,从”语言“列表中选择”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
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值