ASP.NET Core高级编程--C#基本特性(一)

简介: 本文章简略介绍C#的部分特性

C#的基本特性(一)

本文不介绍C#的一些基本语法,C#的基本语法和C,C++等系列语言非常类似,读者如果有上述语言基础很容易入门C#语言,所以本部分的系列文章主要是介绍一些C#中具有而其他语言很少具有的特性。
笔者比较喜欢tanenbaum教授的写作风格,所以笔者写作也会为引出一个新的特性,会先介绍在没有出现这个新特性的时候的相关情况,然后引入这个特性的优点,所以文章可能会比较长,读者可以根据需要来阅读有用的部分。

全局using和隐式using

这个特性是C# 10引入的新特性,用于解决多次引入常用命名空间的问题。为了描述这个特性的作用,我们先来看在没有全局using或隐式using的时候的问题(或者说是不方便的地方),当然在其他语言当中也或多或少也会存在这样的问题(比如Java):
每个程序都不免使用输出的功能,而输出的功能定义在System命名空间下,这个样就会出现下面的情况:

using System;

namespace test;

class Student
{
   
    public void Study()
    {
   
        Console.WriteLine("Study");
    }
}
using System;

class Teacher
{
   
    public void Say()
    {
   
        Console.WriteLine("i am a teacher");
    }
}

我们可以发现,类似于输出这样的常用功能所在的命名空间在每个文件里边都使用了一次,而如果需要使用大量的此类常用的命名空间,显然代码的可读性是非常低的(读者可以想象一下一个源代码文件的开头出现大量的using是什么感觉),为此C#推出了一个特性,叫做global usings,这个特性可以将常见的命名空间汇总到一个cs文件当中,在整个项目的范围里便不需要再次声明这些命名空间
可以改变如下:
在一个cs文件中添加如下代码即可:

global using System;

这样在其他的文件当中便可以把对System命名空间的using去掉,以增加代码的可读性,当然,除了System命名空间,读者还可以根据自己项目的需要,将对常用的命名空间的引用汇总到一个cs文件当中(笔者的习惯是把这个cs文件命名为GlobalUsings.cs)
除了这个特性之外,还有另外一种方式可以实现类似功能,导入由创建项目的类型决定的一些命名空间,就是使用implicit usings配置项,这个配置项是在.net 6中默认启用的,手动启用方式如下:
在csproj文件的PropertyGroup元素内添加子元素:

<ImplicitUsings>enable</ImplicitUsings>

当然,也可以禁用掉这个配置项目,只需要将这个元素的值改为disable即可,如果起用了这个配置项,会根据创建的项目类型自动导入一些命名空间,比如,如果创建了一个web项目,则会默认引入如下命名空间:

System.Net.Http.Json
Microsoft.AspNetCore.Builder
Microsoft.AspNetCore.Hosting
Microsoft.AspNetCore.Http
Microsoft.AspNetCore.Routing
Microsoft.Extensions.Configuration
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Hosting
Microsoft.Extensions.Logging

还有一种方式,就是使用Using标记,使用方式如下:
在csproj文件中Project根元素下配置如下元素即可:

  <ItemGroup>
    <Using Include="test"/>
    <Using Include="System"/>
  </ItemGroup>

作为以上两种方式的补充,主要可以实现对第二种方式的“微调”(可以通过修改Using元素的属性来实现,如果使用Include属性,则包含命名空间,如果使用Exclude属性,则排除相关命名空间),当然,也可以实现第一种方式的所有功能,但这种应用相当少见

相关文章
|
7天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
10天前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
32 7
|
6天前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
6天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
30天前
|
传感器 数据采集 物联网
探索.NET nanoFramework:为嵌入式设备编程的新途径
探索.NET nanoFramework:为嵌入式设备编程的新途
40 7
|
6天前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
|
6天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
7天前
|
程序员 C# 图形学
全面的C#/.NET自学入门指南
全面的C#/.NET自学入门指南
|
30天前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
34 1
|
1月前
|
人工智能 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)